C#学习笔记-ref与out

xiaoxiao2021-02-28  76

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参数传递。)。

转载请注明原文地址: https://www.6miu.com/read-58787.html

最新回复(0)