`

方法参数关键字params、ref及out

    博客分类:
  • C#
阅读更多

这是三个关键字通过字面不是很好理解,我通过三个demo 分别表示一下。

Params

     public static void UseParams (params object [] list)

        {

            for (int i = 0; i < list.Length; i++)

            {

                Console .WriteLine(list[i]);

            }

        }

        static void Main(string [] args)

        {

            UseParams ('a' , "aa" ,"3" );

            UseParams ('b' , "shit" );

            UseParams ("ok" );

            Console .Read();

        }

通过上面的Demo 可以总结出Params 在方法的参数数目可变的时候使用,需要注意的是在方法声明中使用params 关键字之后不允许再有任何其他参数,并且方法声明中只允许有一个params 关键字;

 

Ref

         public static void UseRef(ref int i)

        {

            i += 100;

            Console .WriteLine("i = {0}" , i);

        }

        static void Main(string [] args)

        {

            int i = 10;

            Console .WriteLine("Before the method calling: i = {0}" , i);

            UseRef(ref i);

            Console .WriteLine("After the method calling: i = {0}" , i);

            Console .Read();

        }

        // 控制台输出:

        //Before the method calling : i = 10

        //i = 110

        //After the method calling: i = 110

通过这个Demo 发现使用ref 关键字,使参数按引用传递,其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

说明:

1 、若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

2 、传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。

3 、属性不是变量,因此不能作为 ref 参数传递。

4 、尽管 ref out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码。

5 、如果一个方法采用 ref out 参数,而另一个方法不采用这两类参数,则可以进行重载。

 

Out

public static void UseOut(out int i)

        {

            i = 10;

            i += 100;

            Console .WriteLine("i = {0}" , i);

        }

        static void Main(string [] args)

        {

            int i;

            UseOut(out i);

            Console .WriteLine("After the method calling: i = {0}" , i);

            Console .Read();

        }

通过上面发现outref 十分相似,不同之处在于:

        1 ref 要求变量必须在传递之前进行初始化。

2 、尽管作为 out 参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。

 

 

 

     

 

 

 

 

分享到:
评论

相关推荐

    详解C#中三个关键字params,Ref,out

    本文主要讨论params关键字,ref关键字,out关键字。非常不错,具有参考借鉴价值,需要的朋友参考下吧

    Unity3D教程:ref 、out、params参数区别1

    // str is now “changed” } } 方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。ref可以把参数的数值传递

    C#中ref,out和params有什么区别

    C#中ref,out和params有什么区别 out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化...若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字

    基于params,ref,out的参数问题详解

    最近在写程序时遇到params,ref,out 参数问题。回头有自习看了看MSDN,才巩固了基础。现在和大家分享一下。paramsparams 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,它在只能出现一次...

    asp.net(c#)ref,out ,params的区别

    C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性。但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,params吧,还有它们的区别。

    C#程序设计复习题.doc

    5、使用ref关键字和out关键字都是通过引用传递参数,不同的是ref方式要求实参必须 在传递之前进行__________。而采用out方式时不要求在调用方法前对实参进行____ ______。 6、静态方法只能访问类中的 ________ 字段...

    鹏哥特色教程之C#入门到精通 基础篇 2/2

    23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26.命名空间 27.接口 28.泛型 29.抽象类 30.访问限制关键字 31.所有的类的父类 32.委托 ...

    鹏哥特色教程之C#入门到精通 中级篇 1/5

    23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26.命名空间 27.接口 28.泛型 29.抽象类 30.访问限制关键字 31.所有的类的父类 32.委托 ...

    鹏哥特色教程之C#入门到精通 中级篇 3/5

    23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26.命名空间 27.接口 28.泛型 29.抽象类 30.访问限制关键字 31.所有的类的父类 32.委托 ...

    鹏哥特色教程之C#入门到精通 中级篇 5/5

    23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26.命名空间 27.接口 28.泛型 29.抽象类 30.访问限制关键字 31.所有的类的父类

    CH02-C#面向对象编程-OOP.md

    1. static关键字 2. C#中的集合 * ArrayList * HashTable ...3. out,ref,params关键字 4. 方法重载 5. 继承 6. 多态 * 虚方法实现多态 * 抽象方法实现多态 * 虚方法和抽象方法的区别 7. 接口

    C#部分基础知识整理

    C# 中的yield、ref、out、params关键字理解.并有代码测试。 C#预处理指令(未做测试例子)。 对C# 中堆栈,堆,值类型,引用类型的理解。

    在一小时内学会 C#(txt版本)

    C# 是一种具有 C++ 特性,Java 样式及 BASIC 快速建模特性的编程语言。如果你已经知晓 C++ 语言,本文将在不到一小时的时间内带你快速浏览 C# 的语法。如果熟悉 Java 语言,Java 的编程结构、打包和垃圾回收的概念...

    自考-计算机基础与程序设计试卷(附答案).doc

    下面关键字中不是用来修饰方法的参数的是 【 】 A. ref B. params C. out D. in 18. 数据库管理系统的英文缩写是 【 】 A. DBMS B. DBS C. DBA D. DB 19. 公司中有多个部门和多名职员,每个职员只能属于一个部门,...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    8.3 使用ref和out参数 142 8.3.1 创建ref参数 142 8.3.2 创建out参数 143 8.4 计算机内存的组织方式 145 8.5 system.object类 147 8.6 装箱 147 8.7 拆箱 148 8.8 数据类型的安全转换 149 8.8.1 is操作符 ...

    c#学习笔记.txt

    params :params 关键字可以指定在参数数目可变处采用参数的方法参数 ref :引用传递 out : 7, namespace(名字空间) C#学习笔记(2)【大 中 小】【打印】【加入收藏】【关闭】 【收藏到新浪ViVi】【收藏到365KEY】 ...

Global site tag (gtag.js) - Google Analytics