C#中Out和Ref参数修饰符

在编程过程中对于函数之间的参数的传递一般分为两种:传值和传地址。下面为大家分析一下。

传值

比如你又一份文档,如果采用传值的话,相当于我复制了一份,因此我对我这份文档的修改都不会影响到你的那份。如果你对这句话了解的话,那么就简单了。

下面看一个小Demo。

<span style="font-family:SimSun;font-size:18px;"> static void Main(string[] args)
        {
            //定义一个变量
            int val=1 ;
            //调用方法
            Method(val);
            Console.WriteLine(val); //最后输出结果还是1

        }

        static void Method( int i)
        {
            //这是我的那份文档的复制品
            //无论我如何修改,都影响不到你的
            i = i+ 44;
            Console.WriteLine(i); //我的文档的输出结果是45
        }</span>

传址引用

还是你又一份文档,只不过如果采取传值引用的话,我们两个人共享这份文档,那么可想而知,无论谁操作都会影响到最后的显示

Ref关键字

还是上面的那个Demo,如果换成Ref关键字,效果如下

<span style="font-family:SimSun;font-size:18px;">  static void Main(string[] args)
        {
            //定义一个变量
            int val=1 ;
            //调用方法
            Method( ref val);
            Console.WriteLine(val); //最后输出结果是45

        }

        //按照传引用调用
        static void Method(ref int i)
        {
            //俩人共享文档,所以我做的修改
            //都会在最后呈现
            i = i+ 44;

        }</span>

Out关键字

近来再编程过程中又遇到了Out关键字,与Ref的功能相当,都是传值引用,区别在于Ref在传递之前,需要对文档进行初始化。还是上面的例子,看一下效果

<span style="font-family:SimSun;font-size:18px;">  static void Main(string[] args)
        {
            //定义一个变量
            int val ;//与Ref的区别在于,在此可以不进行初始化
            //调用方法
            Method( out val);
            Console.WriteLine(val); //最后输出结果是44

        }

        //按照传引用调用
        static void Method(out int i)
        {

            //i = i+44;//这句话会报错
            i = 44;

        }</span>

Ref与Out的区别

第一:还是两份文档,只不过采取Ref方式的话,你不能给我一份空文档,而Out则可以允许你给我一份空文档。

第二:采取Ref方式,我可以直接对参数进行+、-等操作,而Out方式则必须先赋值,才能进行相应操作。

时间: 2024-08-27 12:42:03

C#中Out和Ref参数修饰符的相关文章

out 和 ref 参数修饰符

整理自MSDN out: out 关键字通过引用传递参数.这与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量.若要使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字.例如: class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } } 尽管作为 out 参数

C#中方法的参数修饰符

做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重要的知识总结成点记录下来,方便以后快速阅读. 方法的参数及参数修饰符: 1.(无).如果一个参数没有用参数修饰符标记,则认为它将按值进行传递,这将意味着被调用的方法收到原始数据的一份副本. 2. out:输出参数由被调用的方法赋值,因此按引用传递,如果被调用的方法没有给输出参数赋值,就会出现编译错误

C++中 容易忽视的const 修饰符

C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误!(如类型不匹配问题) (2)编译器处理方式不同.define宏是在预处理阶段展开,const常量是编译运行阶段使用. (3)存储方式不同.define宏仅仅是展开,有很多地方使用,就展开多少次,不会分配内存.const常量会在内存

文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述,基本分类 如下图所示: 类成员包括字段,方法,和属性 2.字段 如上图字段分为普通字段和静态字段,两者的使用有区别,但是最大的区别在于两者在内存中的保存位置有区别. 普通字段属于对象而静态字段属于类,在使用过程中谁的字段就由谁来调用. 静态字段和普通字段的定义如下: 在调用时分各自调用 #####类

C#原始类型扩展方法—this参数修饰符

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀.仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩

新年在家学java之基础篇-参数&amp;修饰符&amp;构造器

可变参数 不知道可能给方法传递多少个参数时使用这个方法 public void printInfo (String[] args) --可以定义一个数组,在调用这个方法适合赋值给一个数组 public void aaa (String... args) --用java特有的...来传递可变个数的参数,在使用时,与数组的使用方式相同 如果使用数组,在调用方法是要用 a.printInfo(null):没有参数就要定义一个空数组或者null,而第二种是可以直接使用a.aaa(); 如果一个方法有多个

block 中使用__weak 和__strong修饰符的问题

在ARC环境下,我们常常会使用weak 的修饰符来修饰一个变量,防止其在block中被循环引用,但是有些特殊情况下,我们在block中又使用strong 来修饰这个在block外刚刚用__weak修饰的变量,为什么会有这样奇怪的写法呢? 后来上网查资料,给的解释就是下面的这段话: 在block中调用self会引起循环引用,但是在block中需要对weakSelf进行 strong,保证代码在执行到block中,self不会被释放,当block执行完后, 会自动释放该strongSelf: 对于程

C#中的overrid和new修饰符区别(代码)

在C#的继承中尝尝会用到相关的修饰词:override和new.这两个修饰符都可以在新的子类中,重写同名的父类方法. override: 扩展或修改继承的方法.属性.索引器或事件的抽象或虚拟实现需要使用到. new:在用作声明修饰符时,new 关键字可以显式隐藏从基类继承的成员. 隐藏继承的成员时,该成员的派生版本将替换基类版本. 以上是这两个修饰符的解释.对于这两者之间的区别之类的说法,其实网上找到的有很多,大多都是些概念性的东西.我这里主要是对于,自己测试的代码和大家分享下. 1 using

解析Visual C# 7.2中的private protected访问修饰符

去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private protected访问修饰符(Access Modifier).至此,C#语言的访问修饰符有以下几种: private protected public internal internal protected private protected 既然有了private和protected,那么privat