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("传值参数调用函数之前的值\n" + "m的值为:" + m + "\n" + "n的值为:" + n + "\n\n");
            Swap(m, n);
            Console.Write("传值参数调用函数之后的值\n" + "m的值为:" + m + "\n" + "n的值为:" + 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("传值参数调用函数之前的值\n" + "m的值为:" + m + "\n" + "n的值为:" + n + "\n\n");
            Swap(ref m, ref n);
            Console.Write("传值参数调用函数之后的值\n" + "m的值为:" + m + "\n" + "n的值为:" + 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("传值参数调用函数之后的值\n" + "m的值为:" + m + "\n" + "n的值为:" + 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传进来的值,并且一定要在函数内赋一个值,或者说函数承担初始化这个变量的责任。

转载于:https://www.cnblogs.com/dolphin-gjh/p/3423957.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值