1. 引用类型与值类型的对比:引用类型的值是对数据实际存储位置的引用。更改不了变量值(即引用地址本身)但可以更改引用所指向的数据。而值类型则更改的是变量副本,不会影响原始数据。数据类型中与地址相关的例如string、数组等为引用类型,直接与值相关的例如int等为值类型。
2. 引用参数ref:使参数以传引用的方式传递,是被调用的方法可以用新值来更新调用者的变量。ref参数只是传递的变量的别名,即只是为现有的变量分配了参数名,而不是创建新变量并将实参的值复制给它。就以下简单例子说明。
namespace ConsoleApp1
{
class Program
{
static void Main()
{
string one = "null";
string two = "Your name?";
System.Console.WriteLine("The old : {0} and {1}!!!",one ,two );
Swap(ref one , ref two);
System.Console.WriteLine("The new : {0} and {1}!!!", one, two);
test(one, two);
System.Console.WriteLine("The three : {0} and {1}!!!", one, two);
System.Console.ReadLine();
}
static void Swap(ref string x, ref string y)
{
string temp;
x = "Swap";
temp = x;
x = y;
y = temp;
}
static void test(string x, string y)
{
string temp;
x = "test";
temp = x;
x = y;
y = temp;
}
}
}
输出结果:
3. 输出参数out:以传引用的方式写入一个未初始化的局部变量(ref参数的变量需在被方法调用前赋值,而out参数的变量则不需要)以下两张图可以明显看出正误
4. 引用参数ref与输出参数out的区别
ref旨在改变变量的值,需要初值。而out旨在输出变量的值,不需要初值,需终值。
out:即使在调用之前,赋了初值,但在方法体中调用时值被清除,但因其旨在输出,故而需为其在方法体中赋终值。使方法体有多个返回值时可用(开发人员可以通过声明一个或多个out参数来克服方法只有一个返回类型的限定,例如如果方法要返回两个值,就可以使用以方法返回值形式正常返回一个值,另一个值写入别名变量并作为out参数传递。)。