首页 > 代码库 > ref out 方法参数

ref out 方法参数

ref 关键字使用参数按引用传递,而不是值,通过引用传递的效果是在方法中对参数的任何修改都会反映在调用方法 的基础参数中。引用参数的值与基础参数变量的值始终是一样的。
1.若要使用 ref 参数,则方法定义和调用方法都必须显示使用 ref关键字
2.传递到 ref 参数必须先初始化,这与out不同,out的参数在传递之前不需要显示初始化
3.属性不是变量,因此不能作为 ref 参数传递
4.尽管ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref参数,而另一个方法采用out参数,则无法重载这两个方法。
如果尝试这么做,将导致不能编译该代码。
5.如果一个方法采用 ref 或out参数,而另一个方法不采用这两类参数,则可以进行重载。
public class MyApp{
     public static void UseRef(ref int i){
         i+=100;
         Console.WriteLine("i={0}",i);
     }

    static void Main(){

        int i=10;
        Console.WriteLine("before : i={0}",i);
        UseRef(ref i);
        Console.WriteLine("after : i={0}",i);
    }
}
/* before : i=10;
    i=110;
 * after : i=110;
 */


 //out关键字会导致参数通过引用来传递,这引ref关键字类似
 与ref的不同之处:
     1.ref要求变量必须在传递之前进行初始化
     2.尽管作为out参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值

public class MyApp{
     public static void UseRef(ref int i){
         i+=100;
         Console.WriteLine("i={0}",i);
     }

    static void Main(){

        int i;
        Console.WriteLine("before : i={0}",i);
        UseRef(ref i);
        Console.WriteLine("after : i={0}",i);
    }
}
/* before : i=0;
    i=100;
 * after : i=100;
 */     
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>