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传进来的值,并且一定要在函数内赋一个值,或者说函数承担初始化这个变量的责任。

  • 相关阅读:
    【机器学习】算法原理详细推导与实现(一):线性回归
    《0~3岁孩子的 正面管教》——备忘
    马歇尔·卢森堡《非暴力沟通》——备忘
    李笑来《财富自由之路》——备忘
    select、poll、epoll之间的区别总结[整理]
    堆和栈区别
    Linux 文件系统剖析
    Inside The C++ Object Model(五)
    Inside The C++ Object Model(四)
    Inside The C++ Object Model(三)
  • 原文地址:https://www.cnblogs.com/dolphin-gjh/p/3423957.html
Copyright © 2011-2022 走看看