C#中的ref关键字

这篇具有很好参考价值的文章主要介绍了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}");
      }
  }

运行结果,如下图所示:

把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}");
      }
  }

运行结果,如下所示:

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

引用参数(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}");
      }
  }

运行结果,如下图所示:

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

使用ref的限制

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

 const int val = 6;

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

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

  int val;
 ShowDouble(ref val);

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

参考书籍

《C#入门经典(第7版)》——Benjamin Perkins、Jacob Vibe Hammer、Jon D. Reid文章来源地址https://www.toymoban.com/news/detail-747698.html

到了这里,关于C#中的ref关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# const关键字学习

    你居然不知道const?今天在做项目的时候别人问我的,我确实不知道这个,今天我们就来一起学习一下const定义局部变量,这个对于常数变量非常的友好的,可以提高程序的运行效率,因为它是在编译时的操作,所以我们必须要学习一下,这不就是提

    2024年01月22日
    浏览(53)
  • C#中out关键字

    在C#中可以使用out,指定所给的参数是一个输出参数。out的使用方式与ref相同,都是在函数定义和函数调用中用作参数的修饰符。 运行结果,如下图所示: 实际上,out的执行方式与引用参数几乎完全一样,因为在函数执行完毕后,该参数的值将返回给函数

    2024年02月05日
    浏览(53)
  • C# this关键字的作用

    在C#中, this 有以下几种主要作用: 引用当前对象: this  用于引用当前类的实例。可以通过  this  来访问当前对象的成员变量、方法和属性。 区分字段与局部变量:当成员变量和局部变量同名时,可以使用  this  来区分。 在构造函数中调用其他构造函

    2024年02月22日
    浏览(50)
  • C#关键字Virtual用法详解

    本篇讲解C#Virtual用法 目录 定义 特性 实例 virtual 用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。 虚拟成员的实现可由派生类中的重写成员更改

    2024年02月15日
    浏览(49)
  • 正确理解c# default关键字

    最近QA测试一个我开发的一个Web API时,我意识到之前对C#的 default 的理解一直是 想当然 的。具体情况是这样,这个API在某些条件下要返回模型的默认值,写法类似于下面这样 实际上,这个API会返回 204 No Content ,而不是想象中的一个空的WeatherForecast。API返回204,说明 default 得

    2024年01月16日
    浏览(44)
  • 【C++】:C++关键字,命名空间,输入&输出,缺省参数

    C++总计63个 ,C语言32个。 ps:下面我们只是看一下C++有多少,不对进行具体的讲解。在以后的学习中会会了解的更深。 在C语言的语法中,有时候会遇到这样的情况: 我们的本意是创建一个全局的 rand 变量,再进行输出。那为什么会报错呢? 原因:

    2024年04月27日
    浏览(48)
  • Python 知识体系补全(闭包、装饰器、关键字参数**kwargs,位置参数*args)

    闭包:     什么是闭包,一句话,在函数中再嵌套一个函数,并且引用外部函数的变量,这就是一个闭包了     一般外部函数的返回值为内部函数      def outer(x):          def inner(y):              return x + y         return outer     # 外部函数的返回值,是内部函数     

    2024年02月06日
    浏览(41)
  • Rust中的关键字

    严格 as - 强制类型转换,消除特定包含项的 trait 的歧义,或者对 use 和 extern crate 语句中的项重命名 async - 返回一个 Future 而不是阻塞当前线程( 2018版新增) await - 暂停执行直到 Future 的结果就绪( 2018版新增) break - 立刻退出循环 const - 定义常量或不变裸指针(constant raw

    2024年02月07日
    浏览(41)
  • mysql中的关键字

    MySQL是一种流行的开源关系型数据库管理系统,包含许多,这些在MySQL中具有特殊的含义,用于执行各种数据库操作。以下是MySQL中的一些及其用法: ADD:用于向现有表添加一列或多列。 ALTER:用于修改表的结构,例如更改列名、更改列的数据类型、修改索

    2024年02月16日
    浏览(41)
  • 【Python】函数进阶 ① ( 函数返回多个返回值 | 函数参数传递类型简介 | 位置参数 | 关键字参数 )

    在函数中 , 如果要 返回 多个返回值 , 可以 在 return 语句中 , 设置多个返回值 , 这些返回值之间使用 逗号 隔开 , 这些返回值的类型是 元组 tuple 类型的 ; 在下面的代码中 , 返回了 3 个返回值 , 其 本质上是返回了一个包含 3 个元素的 元组 数据容器 , 可以使用多重赋值将返回的

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包