大钟子 发表于 2023-11-29 19:43:38

C#中的ref关键字

值参数(Value Parameters)

1、传递的是参数的值(数据的副本)而不是原始数据本身。
2、函数内部对值参数的修改不会影响到原始数据。
3、通常用于传递基本数据类型(如整数、浮点数、布尔值)或不可变对象(如字符串、元组)。
4、值参数的传递是一种传值调用(Call by Value)。
示例代码
   internal class Program<br>  {<br>        static void ShowDouble(int val)<br>      {<br>            val *= 2;<br>            Console.WriteLine($"ShowDouble函数中val的值为:{val}");<br>      }<br>        static void Main(string[] args)<br>      {<br>            int val = 6;<br>            Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");<br>            ShowDouble(val);<br>            Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");<br>      }<br>  }运行结果,如下图所示:

把val作为一个参数,调用ShowDouble()并不影响Main()中val的值
那么如何改变val的值呢?
可以使用一个含返回值的函数
代码如下所示:
   internal class Program<br>  {<br>        static int ShowDouble(int val)<br>      {<br>            val *= 2;<br>            Console.WriteLine($"ShowDouble函数中val的值为:{val}");<br>            return val;<br>      }<br>        static void Main(string[] args)<br>      {<br>            int val = 6;<br>            Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");<br>            val = ShowDouble(val);<br>            Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");<br>      }<br>  }运行结果,如下所示:

成功改变了参数的值,但是这种方式并不直观,且不能改变用作参数的多个变量的值(因为函数只有一个返回值),这时就可以通过引用来传递参数。
引用参数(Reference Parameters)

1、传递的是参数的引用(内存地址),直接操作原始数据。
2、函数内部对引用参数的修改会影响到原始数据。
3、通常用于传递可变对象(如列表、字典)或对象实例,以便在函数内部进行修改并在函数外部保持修改后的状态。
4、引用参数的传递是一种传址调用(Call by Reference)。
C#中使用ref关键字指定参数,代码如下所示:
   internal class Program<br>  {<br>        static void ShowDouble(ref int val)<br>      {<br>            val *= 2;<br>            Console.WriteLine($"ShowDouble函数中val的值为:{val}");        <br>      }<br>        static void Main(string[] args)<br>      {<br>            int val = 6;<br>            Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");<br>            ShowDouble(ref val);<br>            Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");<br>      }<br>  }运行结果,如下图所示:

要注意,不仅在函数的声明中要使用ref指定参数,如代码 static void ShowDouble(ref int val)所示,在函数的调用中,也要再次指定它,如代码 ShowDouble(ref val)所示。
使用ref的限制

1、函数可能会改变引用参数的值,所以必须在函数调用中要使用“非常量”变量
const int val = 6;这种写法,编译器会报错,如下图所示:

2、必须使用初始化过的变量。C#不允许假定ref参数在使用它的函数中初始化。
 int val;<br>  ShowDouble(ref val);这种写法,编译器也会报错,如下图所示:

参考书籍

《C#入门经典(第7版)》——Benjamin Perkins、Jacob Vibe Hammer、Jon D. Reid

来源:https://www.cnblogs.com/mingupupu/archive/2023/11/29/17864054.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: C#中的ref关键字