zoukankan      html  css  js  c++  java
  • C#传递参数大集合

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

    传值参数示例:

    class Program
        {
            static void Main(string[] args)
            {
                string m = "m";
                string n = "n";
                Console.Write("传值参数调用函数之前的值 " + "m的值为:" + m + " " + "n的值为:" + n + " ");
                Swap(m, n);
                Console.Write("传值参数调用函数之后的值 " + "m的值为:" + m + " " + "n的值为:" + n + " ");
                Console.Read();
            }
            private static void Swap(string m, string n)
            {
                string temp;
                temp = m;
                m = n;
                n = temp;
            }
        }

    运行效果:

    在调用交换值得方法之后m和n的值仍未改变。

    传址参数示例:
        class Program
        {
            static void Main(string[] args)
            {
                string m = "m";
                string n = "n";
                Console.Write("传值参数调用函数之前的值 " + "m的值为:" + m + " " + "n的值为:" + n + " ");
                Swap(ref m, ref n);
                Console.Write("传值参数调用函数之后的值 " + "m的值为:" + m + " " + "n的值为:" + n + " ");
                Console.Read();
            }
            private static void Swap(ref string m, ref string n)
            {
                string temp;
                temp = m;
                m = n;
                n = temp;
            }
        }

    执行效果:

    在调用了传址函数之后结果明显发生了变化。

    输出参数示例:

     class Program
        {
            static void Main(string[] args)
            {
                string m, n;
                Swap(out m, out n);
                Console.Write("传值参数调用函数之后的值 " + "m的值为:" + m + " " + "n的值为:" + n + " ");
                Console.Read();
            }
            private static void Swap(out string m, out string n)
            {
                m = "m";
                n = "n";
                string temp;
                temp = m;
                m = n;
                n = temp;
            }
        }

    运行效果:

    运行的结果页发生了变化。

    由此可知:传址和输出两个的运行效果是相同的,但是他们之间也是有区别的。ref在使用的时候参数必须在调用函数之前进行赋值,而out在使用的时候参数无需之前进行赋值,但是必须进行定义。总结一下可以说是:系统对ref的限制是更少一些的。out虽然不要求在调用前一定要初始化,但是其值在函数内部是不可见的,也就是不能使用通过out传进来的值,并且一定要在函数内赋一个值,或者说函数承担初始化这个变量的责任。

  • 相关阅读:
    2018.10.29-dtoj-3999-游戏(game)
    2018.10.27-dtoj-3996-Lesson5!(johnny)
    2018.10.25-dtoj-2903-蛋糕(cake)
    2018.10.25-dtoj-1113-Hy拯救公主 princess
    2018.10.25-dtoj-3989-五子棋(fir)
    2018.10.25-dtoj-1588-Intelligence test(test)
    2018.10.24-dtij-2636-262144(game)
    2018.10.23-dtoi-2004:象棋Chess(Chess)
    中国PostgreSQL认证考试,证书类别、考试科目、及格分数、报名方式
    PostgreSQL技术分享公开课:备份恢复与Point-in-Time Recovery(PITR)
  • 原文地址:https://www.cnblogs.com/dolphin-gjh/p/3423957.html
Copyright © 2011-2022 走看看