C#学习笔记-ref与out

来源:互联网 发布:泰安广电网络 编辑:程序博客网 时间:2024/05/21 15:44

1.     引用类型与值类型的对比:引用类型的值是对数据实际存储位置的引用。更改不了变量值(即引用地址本身)但可以更改引用所指向的数据。而值类型则更改的是变量副本,不会影响原始数据。数据类型中与地址相关的例如string、数组等为引用类型,直接与值相关的例如int等为值类型。

2.     引用参数ref:使参数以传引用的方式传递,是被调用的方法可以用新值来更新调用者的变量。ref参数只是传递的变量的别名,即只是为现有的变量分配了参数名,而不是创建新变量并将实参的值复制给它。就以下简单例子说明。

    namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            string one = "null";
            string two = "Your name?";
            System.Console.WriteLine("The old : {0} and {1}!!!",one ,two );
            Swap(ref one , ref two);
            System.Console.WriteLine("The new : {0} and {1}!!!", one, two);
            test(one, two);
            System.Console.WriteLine("The three : {0} and {1}!!!", one, two);
            System.Console.ReadLine();
        }
        static void Swap(ref string x, ref string y)
        {
            string temp;
            x = "Swap";
            temp = x;
            x = y;
            y = temp;
        }
        static void test(string x, string y)
        {
            string temp;
            x = "test";
            temp = x;
            x = y;
            y = temp;
        }
    }
    
}

输出结果:

3. 输出参数out:以传引用的方式写入一个未初始化的局部变量(ref参数的变量需在被方法调用前赋值,而out参数的变量则不需要)以下两张图可以明显看出正误


4. 引用参数ref与输出参数out的区别

  ref旨在改变变量的值,需要初值。而out旨在输出变量的值,不需要初值,需终值。

  out:即使在调用之前,赋了初值,但在方法体中调用时值被清除,但因其旨在输出,故而需为其在方法体中赋终值。使方法体有多个返回值时可用(开发人员可以通过声明一个或多个out参数来克服方法只有一个返回类型的限定,例如如果方法要返回两个值,就可以使用以方法返回值形式正常返回一个值,另一个值写入别名变量并作为out参数传递。)。

原创粉丝点击