.net 中方法参数的参数特性为值参数,实际传入的为引用类型(特殊引用类型String除外,但是字符串数组包括在内,因为数组是引用类型)时,方法体可以改变引用对象的数据成员,但是不能改变引用对象本身。
如果参数特性为引用参数,不管传入的是值类型还是引用类型,方法体将会改变引用对象的数据成员,也可以改变引用对象本身。
请看以下代码:
class Program
{
static void Main(string[] args)
{
int[] I1 = new int[1] { 1 };
ChangI1(ref I1);
//I1[0]=199;
int[] I2 = new int[1] { 1 };
ChangI2(I2);
//I2[0]=199;
int[] I3 = new int[1] { 1 };
ChangI3(I3);
//I3[0]=1000;
}
static void ChangI1(ref int[] i)
{
i[0] = 1000;
i = new int[1] { 199 };
}
static void ChangI2(int[] i)
{
i = new int[1] { 199 };
}
static void ChangI3(int[] i)
{
i[0] = 1000;
i = new int[1] { 199 };
}
}
{
static void Main(string[] args)
{
int[] I1 = new int[1] { 1 };
ChangI1(ref I1);
//I1[0]=199;
int[] I2 = new int[1] { 1 };
ChangI2(I2);
//I2[0]=199;
int[] I3 = new int[1] { 1 };
ChangI3(I3);
//I3[0]=1000;
}
static void ChangI1(ref int[] i)
{
i[0] = 1000;
i = new int[1] { 199 };
}
static void ChangI2(int[] i)
{
i = new int[1] { 199 };
}
static void ChangI3(int[] i)
{
i[0] = 1000;
i = new int[1] { 199 };
}
}