c# 方法参数修饰符(out、ref、in)的区别

这篇具有很好参考价值的文章主要介绍了c# 方法参数修饰符(out、ref、in)的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在C#中,ref、out和in是三种方法参数修饰符,它们在传递参数的方式和作用上有所不同。

ref修饰符

传递方式:使用ref修饰符的参数可以是输入输出参数,即在方法调用前后都可以对其进行修改。
作用:通过ref修饰符传递的参数必须在方法调用之前初始化,并且方法内对参数的修改会对调用方的变量产生影响。ref修饰符可以用于值类型和引用类型参数。
out修饰符:

传递方式:使用out修饰符的参数只能作为输出参数,即在方法内部必须对其进行赋值。
作用:通过out修饰符传递的参数可以在方法内部进行赋值,而不需要在方法调用之前初始化。out修饰符可以用于值类型和引用类型参数。
in修饰符:

传递方式:使用in修饰符的参数只能作为输入参数,即在方法内部不能对其进行修改。
作用:通过in修饰符传递的参数可以防止方法对其进行修改,从而提高代码的可靠性和安全性。in修饰符只能用于值类型和只读引用类型参数,并且不能用于方法的返回值。
总结:

ref修饰符用于输入输出参数,方法内部可以对其进行修改。
out修饰符用于输出参数,方法内部必须对其进行赋值。
in修饰符用于输入参数,方法内部不能对其进行修改。
使用这些修饰符可以灵活地控制方法参数的传递方式,从而满足不同的需求。文章来源地址https://www.toymoban.com/news/detail-668552.html

internal class Program
    {
        private static void Main(string[] args)
        {
            //int num1 = 10;
            //number0(num1);
            //Console.WriteLine("初始值:" + num1);
            //Console.ReadLine();
            //------------------------------
            //int num1 = 10;//使用ref修饰符,实参必须初始化
            //numberRef(ref num1);
            //Console.WriteLine("初始值:" + num1);
            //Console.ReadLine();
            //-------------------------------
            //int num1 = 10;
            //numberOut(out num1);
            //Console.WriteLine("初始化的值:" + num1);
            //Console.ReadLine();
            //---------------------------------
            int num1 = 10;
            numberIn(in num1);//可以省略in
            Console.ReadLine();
        }

        /// <summary>
        /// 无修饰符
        /// </summary>
        /// <param name="num1"></param>
        public static void number0(int num1)
        {
            num1 *= 2;
            Console.WriteLine("修改后的值:" + num1);
        }

        /// <summary>
        /// ref(reference)修饰的参数必须初始化,方法内部,通过引用传递,修改实参的值,最终输出
        /// </summary>
        /// <param name="num1"></param>
        public static void numberRef(ref int num1)
        {
            num1 *= 2;
            Console.WriteLine("ref参数修改后的值:" + num1);
        }

        /// <summary>
        /// out修饰的参数可以初始化,也可以不初始化,传递过来的参数会被清空,最终,以方法内部赋值的结果为准
        /// </summary>
        /// <param name="number1"></param>
        public static void numberOut(out int number1)
        {
            number1 = 20;
            Console.WriteLine("out参数修改的值:" + number1);
        }

        /// <summary>
        /// in修饰符参数,限制方法参数传递过来的实参的修改
        /// </summary>
        /// <param name="number1"></param>
        public static void numberIn(in int number1)
        {
            //方法内部不能修改,传递过来的实参,只能读取,不能修改
            // number1 = 10;
            Console.WriteLine("in 参数修饰符:" + number1);
        }
    }

到了这里,关于c# 方法参数修饰符(out、ref、in)的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C#中数组参数=out参数?

    点击查看代码 https://blog.csdn.net/weixin_44806070/article/details/107882525 https://www.cnblogs.com/mdnx/archive/2012/09/04/2671060.html

    2024年02月13日
    浏览(33)
  • C#中数组=out参数?

    点击查看代码 https://blog.csdn.net/weixin_44806070/article/details/107882525 https://www.cnblogs.com/mdnx/archive/2012/09/04/2671060.html

    2024年02月13日
    浏览(36)
  • 【C#】Sql Server 设置IN查询方法内的参数,固定参数、动态参数以及通过分隔含有逗号隔开的字符串转数据集

    在平时使用sql语句查询时,in查询肯定少不了,多数用于一些数据统计或者测试类。in查询并不建议放到实际常用的查询列表里。 此篇文章主要简单聊聊,in查询方法内的参数设置方式,以及通过分隔函数将含有逗号隔开的字符串转为数据集进行查询 在 SQL Server 中,你可以使

    2024年02月15日
    浏览(45)
  • 举例说明.net中in与out的作用与区别

    在 .NET 中,in 和 out 是用于泛型类型参数的修饰符,它们用于指定参数类型的协变性和逆变性。 - in 修饰符:表示这个泛型类型参数是协变的。也就是说,in 类型参数可以从较特殊的类型隐式转换为较通用的类型。例如: 在上面的例子中,`TakeAnimals` 方法接受一个 `IEnumerable

    2023年04月26日
    浏览(33)
  • [Spring] @Bean 修饰方法时如何注入参数

    目录 一、@Bean 的简单使用 1、正常情况 2、问题提出 二、解决方案 1、@Qualifier 2、直接写方法名 三、特殊情况 1、DataSource 在开发中,基于 XML 文件配置 Bean 对象的做法非常繁琐且不好维护,因此绝大部分情况下都是使用“完全注解开发”。 对于 Spring 而言,IOC 容器中的 Bean

    2024年01月18日
    浏览(27)
  • ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

    2023年8月2日,周三晚上 今天我看到了这样的两行代码: 这让我产生了几个疑问: 为什么有时候用ios_base::out,有时候用ios::out? ios_base::out和ios::out之间有区别吗? 我花了一两个小时才搞清楚.... 目录 结论 ios_base类的 I/O 流控制标志有哪些 ios类的 I/O 流控制标志有哪些 证明它

    2024年02月14日
    浏览(26)
  • 我在VScode学Java类与对象(Java显式参数和隐式参数、静态方法+main方法、Java访问修饰符、static关键字、Java的包、对象数组)第三辑

    我的个人博客主页:如果’\\\'真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习----可以参考我的这篇博客:《我在VScode学Java》 方法会操作对象并访问他们的实例字段。 在Java中,显式参数和隐式参数是方法调用中的两种不同类型的参数。 注释: 第7行: sum 方法的参数

    2024年02月16日
    浏览(71)
  • C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析

    方法是一段代码,只有在调用时才会运行。 您可以将数据(称为参数)传递给方法。 方法用于执行某些操作,也被称为函数。 为什么使用方法?为了重用代码:定义一次代码,然后多次使用。 创建一个方法 方法的定义以方法的名称开头,后跟括号()。C#提供了一些预定义的

    2024年01月24日
    浏览(47)
  • (04)基础强化:接口,类型转换cast/convert,异常处理,传参params/ref/out,判断同一对象

         1、New的截断是指什么?              new除了新开空间创建初始化对象外,还有一个 隐藏 父类同名方法的作用。                  当子类想要隐藏父类同名的方法时用new,用了new后父类同名方法将到此为止,后面         继承的子类,将再也继承不到父类的同

    2024年02月01日
    浏览(31)
  • C#的访问修饰符详解(二)

    在C#中,internal修饰符是一种访问修饰符,它用于控制类成员的访问范围。一个internal成员只能在其定义的程序集中访问,而不能在其他程序集中访问。本文将介绍internal修饰符的使用方法和实例。 internal修饰符的主要作用是控制数据的访问级别。通过将类的成员声明为interna

    2024年02月03日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包