`
朋-张
  • 浏览: 3988 次
社区版块
存档分类
最新评论

ref和out的区别

    博客分类:
  • c#
 
阅读更多
http://www.cnblogs.com/gjahead/archive/2008/02/28/1084871.html

ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:

1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。

2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。

3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

注:在C#中,方法的参数传递有四种类型:传值(by value),传址(by reference),输出参数(by output),数组参数(by array)。传值参数无需额外的修饰符,传址参数需要修饰符ref,输出参数需要修饰符out,数组参数需要修饰符params。传值参数在方法调用过程中如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保留原来传入时的值。传址参数恰恰相反,如果方法调用过程改变了参数的值,那么传入方法的参数在调用完成以后也随之改变。实际上从名称上我们可以清楚地看出两者的含义--传值参数传递的是调用参数的一份拷贝,而传址参数传递的是调用参数的内存地址,该参数在方法内外指向的是同一个存储位置。

方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。

传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。

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

如果两种方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无法定义仅在 ref 和 out 方面不同的重载。

out

方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。

当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。

若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。

不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。

属性不是变量,不能作为 out 参数传递。


网上有很多文章说ref 只传值,out传地址等等这种说法,好像不是非常的准确。以下是我做的实例代码,大家可以去试试:

public int  RefValue(int i,ref int j)
        {
            int k = j;
            j =222;
            return i+k;
        }

     
        public int OutValue(int i, out int j)
        {
            j = 222;
            return i + j;
        }

        private void cmdRef_Click(object sender, EventArgs e)
        {
            int m = 0;
            MessageBox.Show(RefValue(1, ref m).ToString());
            MessageBox.Show(m.ToString());
        }

        private void cmdOut_Click(object sender, EventArgs e)
        {
            int m;
            MessageBox.Show(OutValue(1, out m).ToString());
            MessageBox.Show(m.ToString());
        }
借网上总结的一句话说,ref是有进有出,而out是只出不进。
分享到:
评论

相关推荐

    ref out 的区别

    **`ref` 和 `out` 的联系和区别** 1. **共同点**:两者都是引用传递,都能修改原始变量的值。 2. **区别**: - `ref` 要求在调用方法前必须初始化,而 `out` 不需要。 - `out` 主要用于返回多个值,而 `ref` 更...

    out和ref的区别

    理解`out`和`ref`的区别有助于编写更明确的代码。使用`out`时,调用者清楚地知道方法将提供一个结果,而使用`ref`则表明方法可能修改传入的变量。在实际编程中,应根据需求选择合适的关键字,以提高代码的可读性和...

    C# ref和out的区别

    ### C#中`ref`与`out`的关键区别 在C#编程语言中,方法的参数传递机制提供了多种方式来处理方法内部对外部变量的访问和修改。这其中包括了通过值(by value)和通过引用(by reference)两种基本模式。通过引用传递...

    ref和out传值

    在C#编程语言中,`ref` 和 `out` 关键字用于参数传递,它们都是为了改变函数调用时实参的值。然而,两者在使用上存在一些关键区别,理解这些差异对于编写高效且正确的代码至关重要。 1. **传值方式**: 在C#中,...

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

    ### C#中的`ref`、`out`和`params`的区别 #### 一、概述 在C#编程语言中,`ref`、`out`和`params`是三种不同的参数修饰符,它们分别用于控制方法如何处理传入的参数。这些关键字在不同的场景下提供了非常有用的...

    ref和out的作用(txt)

    #### ref和out的区别 - **初始化**:`ref`参数要求在调用方法之前必须被初始化,而`out`参数则不需要。 - **赋值**:`ref`参数可以在方法外部或内部被赋值,而`out`参数必须在方法内部被赋值。 - **使用场景**:`...

    (搜集整理的)C_中ref和out用法

    在C#编程中,`ref`和`out`关键字是用来处理方法参数的特殊方式,它们允许函数修改调用者提供的变量。虽然这两种关键字在某些方面很相似,但也存在关键的区别。 `ref`关键字: 1. `ref`参数要求在传递到方法之前必须...

    out和ref传值的区别

    ### out和ref传值的区别 在C#编程语言中,函数调用时参数传递的方式有多种,其中`out`和`ref`关键字是用于值类型(如int、struct等)参数传递的重要方式。这两种方式虽然都能实现将局部变量的值传递给方法,但它们...

    C#中关键字ref与out的区别

    C#中关键字ref与out的区别 C#中关键字ref与out的区别是非常重要的...因此,我们可以看到,ref和out关键字的区别在于,ref要求变量必须在传递之前进行初始化,而out关键字不需要初始化,可以在方法中对参数进行初始化。

    Ref和Out参数的例子

    下面将详细探讨`Ref`和`Out`参数的概念、使用方式以及它们之间的区别。 `Ref`参数: `Ref`关键字用于告诉编译器,参数不仅仅是一个值的副本,而是指向实际变量的引用。这意味着当方法修改`Ref`参数时,它直接影响到...

    Ref和out关键字的区别

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

    C_基础:ref和out的区别.txt

    ### C# 基础:ref与out的区别 在C#编程语言中,`ref` 和 `out` 是两个非常重要的关键字,它们主要用于传递参数,特别是在函数调用时需要修改方法外部变量的情况下。掌握 `ref` 和 `out` 的正确使用方式对于编写高...

    c#中ref和out用法

    两者的区别在于,`ref`要求调用者必须已经初始化了变量,而`out`则允许方法来初始化变量。`ref`用于交换或共享内存引用,而`out`主要用于返回方法的结果,即使该结果是多值的。 在实际编程中,`ref`和`out`常用于...

    C#中out与ref的区别实例解析

    本文实例讲述了C#中Out与Ref的区别,可以加深C#程序设计人员对Out和Ref用法的理解,具体分析如下: 一、区别分析: Out和Ref作为参数传递到方法体中,所传递的都是引用地址,两者在操作上本身没有区别。 但Out传递到...

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

    接下来我们将详细探讨这三个关键字的区别和应用场景。 首先,`ref`关键字允许你在方法调用中按引用传递参数,这意味着方法不仅可以读取该参数的当前值,还可以修改它,从而影响到原始变量的值。在使用`ref`时,必须...

    C_中out和ref的区别

    然而,如果仅根据`ref`和`out`的区别来定义重载,编译器会报错,如示例所示。 3. **使用场景**: - `ref`通常用于当你知道参数已经被初始化,并且需要在函数内部保持其原有的引用时。 - `out`通常用于当函数需要...

    C#中ref和out的区别浅析

    因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:  ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该...

Global site tag (gtag.js) - Google Analytics