`

方法参数关键字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

    C# 中的三个关键字:params、ref、out ...params 关键字用于方法参数长度不定的情况,ref 关键字用于引用类型参数,而 out 关键字用于返回多个值。理解这三个关键字的用法和原理对于 C# 开发者非常重要。

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

    在Unity3D编程中,了解如何使用`ref`、`out`和`params`这些特殊的参数修饰符是非常关键的,因为它们能让你更灵活地处理方法间的参数传递。接下来我们将详细探讨这三个关键字的区别和应用场景。 首先,`ref`关键字...

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

    在C#编程语言中,`ref`、`out`和`params`是三个重要的关键字,它们用于处理方法的参数传递。下面将详细解释这三个关键字的含义、用途以及它们之间的区别。 1. `params` `params`关键字允许方法接受可变数量的参数...

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

    在C#编程语言中,`ref`、`out`和`params`是三种不同的参数修饰符,它们分别用于控制方法如何处理传入的参数。这些关键字在不同的场景下提供了非常有用的功能,使得开发者能够更加灵活地编写代码。 #### 二、`ref` ...

    WebServiceRef, Out, Params

    - 方法可以有多个out参数,但在方法声明中只能有一个params关键字,所以out参数和params是不兼容的。 - 调用方法时,out参数同样需要显式声明,但其初始值并不重要,因为方法内部会对其进行处理。 3. **Params...

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

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

    C#中out参数、ref参数与值参数的用法及区别

    C#中out参数、ref参数与值参数的用法及区别 C# 中的参数类型有四种:值参数、ref 参数、out 参数和 params 参数。今天,我们将详细介绍 C# 中的 out 参数、ref 参数和值参数的用法及区别。 值参数 -------- 在...

    c# 关键字 微软官方文档

    - 其他操作符关键字:例如 ref(引用传递参数)、out(输出参数)、in(输入参数)、out(输出参数)、namespace(定义命名空间)、using(用于命名空间或资源清理)、extern(外部方法的修饰符)等。 5. 异步编程...

    C#源代码-out参数的使用.zip

    在`C#源代码-out参数的使用.zip`压缩包中,我们可能找到了一些示例,展示了如何在实际开发中应用`out`参数。 1. **什么是`out`参数?** `out`关键字是C#中定义方法参数的一种方式,它使得方法能够将多个值传递回调...

    C#中的关键字

    * params:定义参数数组。 * ref:定义引用参数。 * sizeof:获取类型的大小。 * stackalloc:在栈上分配数组。 * typeof:获取类型信息。 * unchecked:关闭溢出检查。 * unsafe:定义不安全的代码。 * using:定义using...

    C#中关于方法参数的详解

    在上面的示例中,`PrintNumbers` 方法使用 `params` 关键字来接受任意数量的整数参数,并打印每个参数。 #### 5. 泛型参数(Generic Parameters) 泛型参数允许方法或类具有可变的类型。这提高了代码的复用性和...

    c#下的各种参数的详细说明与用法

    输出参数使用`out`关键字,它与`ref`类似,也允许函数修改参数的值。不同之处在于,`out`参数在调用函数时不需要初始化,而且函数必须为`out`参数赋值。一个例子如下: ```csharp public int testOut(out int x, ...

    Untiy C#参数修饰符

    本文将深入探讨Unity中的三个主要参数修饰符:`ref`, `out`, 和 `params`。 1. **`ref` 修饰符**: - `ref` 关键字用于当函数需要修改传入的变量值时。在调用方法前,必须对变量进行初始化,因为`ref`参数传递的是...

    C#难点逐个击破(3):params数组参数

    总的来说,`params` 关键字提供了一种灵活的方式来处理不确定数量的参数,简化了方法调用的语法,而 `ref` 和 `out` 主要关注参数的值在方法调用中的传递方式。了解并正确使用这些特性可以显著提高代码的可读性和...

    c#中的关键字(共76个)

    out:标识一个参数值会受影响的参数,但在传入方法时,该参数无需先初始化。 override:一个修饰符,表明一个方法将覆载一个虚方法或抽象方法,或一个操作符将覆载基类中定义的同名操作符。 params:声明一个参数...

    C#参数使用练习笔记(完全学习笔记)

    要实现按引用传递,需使用ref或out关键字: ```csharp public void ModifyByRef(ref int num) { num = num + 1; } int original = 10; ModifyByRef(ref original); // original现在变为11 ``` 三、可选参数 C#...

    C#传值的几种方法,可以看一看的

    `out`关键字与`ref`类似,也是进行引用传递,但它要求在函数调用时必须对参数进行初始化,并且函数内部必须为`out`参数赋值。这使得`out`参数常用于返回多个值的情况。 4. `params`关键字: C#中的`params`关键字...

Global site tag (gtag.js) - Google Analytics