C#中的ref关键字


风晓
风晓 2023-12-29 11:17:45 49483 赞同 0 反对 0
分类: 资源
本文主要讲了C#中的ref关键字

值参数(Value Parameters)

1、传递的是参数的值(数据的副本)而不是原始数据本身。

2、函数内部对值参数的修改不会影响到原始数据。

3、通常用于传递基本数据类型(如整数、浮点数、布尔值)或不可变对象(如字符串、元组)。

4、值参数的传递是一种传值调用(Call by Value)。

示例代码

    internal class Program
  {
       static void ShowDouble(int val)
      {
           val *= 2;
           Console.WriteLine($"ShowDouble函数中val的值为:{val}");
      }
       static void Main(string[] args)
      {
           int val = 6;
           Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");
           ShowDouble(val);
           Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");
      }
  }

运行结果,如下图所示:

image-20231030185024616

把val作为一个参数,调用ShowDouble()并不影响Main()中val的值

那么如何改变val的值呢?

可以使用一个含返回值的函数

代码如下所示:

    internal class Program
  {
       static int ShowDouble(int val)
      {
           val *= 2;
           Console.WriteLine($"ShowDouble函数中val的值为:{val}");
           return val;
      }
       static void Main(string[] args)
      {
           int val = 6;
           Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");
           val = ShowDouble(val);
           Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");
      }
  }

运行结果,如下所示:

image-20231030185402536

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

引用参数(Reference Parameters)

1、传递的是参数的引用(内存地址),直接操作原始数据。

2、函数内部对引用参数的修改会影响到原始数据。

3、通常用于传递可变对象(如列表、字典)或对象实例,以便在函数内部进行修改并在函数外部保持修改后的状态。

4、引用参数的传递是一种传址调用(Call by Reference)。

C#中使用ref关键字指定参数,代码如下所示:

    internal class Program
  {
       static void ShowDouble(ref int val)
      {
           val *= 2;
           Console.WriteLine($"ShowDouble函数中val的值为:{val}");        
      }
       static void Main(string[] args)
      {
           int val = 6;
           Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");
           ShowDouble(ref val);
           Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");
      }
  }

运行结果,如下图所示:

image-20231030190228869

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

使用ref的限制

1、函数可能会改变引用参数的值,所以必须在函数调用中要使用“非常量”变量

 const int val = 6;

这种写法,编译器会报错,如下图所示:

image-20231030191147516

2、必须使用初始化过的变量。C#不允许假定ref参数在使用它的函数中初始化。

  int val;
 ShowDouble(ref val);

这种写法,编译器也会报错,如下图所示:

image-20231030191535799

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  129
统信桌面专业版【全盘安装UOS系统】介绍  125
银河麒麟桌面操作系统安装佳能打印机驱动方法  116
银河麒麟桌面操作系统 V10-SP1用户密码修改  106
麒麟系统连接打印机常见问题及解决方法  12
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!