黑马程序员 C#中的 REF与OUT传参方法

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- 

        最近在学习中看见方法定义传参是有REF和OUT两种以前没用过,初次看见觉得奇怪,还在想什么时候C#有REF和OUT参数类型。不过看了些资料了解了这两种参数传递的方式和区别。
        我们都知道,定义一个变量就是在内存中开辟了一个空间,然后在这个空间里面存放值。好了,我们来看点例子了解下:
            Main()
            {
            int Num1 = 10;
            int Num2 = 20;
            Swap(Num1,Num2);
            Console.WriteLine("Num1={0},Num2={1}",Num1,Num2);
            Swap2(ref Num1,ref Num2);
            Console.WriteLine("Num1={0},Num2={1}", Num1, Num2);
            Console.ReadKey();
             }
        而这里我定义了两个方法分别是REF传递的 SWAP2方法和普通的SWAP方法,两个都是对两个传进参数的互换值的操作。代码如下:
   static void Swap(int i1, int i2)
        {
            int temp = i1;
            i1 = i2;
            i2 = temp;
        }
 
        static void Swap2(ref int i1, ref int i2)
        {
            int temp = i1;
            i1 = i2;
            i2 = temp;
        }
        如果我们启动调试功能会发现当调用SWAP方法时候,Num1和Num2两个参数并没有像我们预期的互换数值,而SWAP2方法却实现了互换操作。通过这个例子我们可以看出REF传参方式,就是把变量声明的时候指向的内存空间中的值进行操作,而普通的传参则是传递的是调用方法时候传递进去参数的副本,所以在调用SWAP2方法之后,Num1和Num2的值分别都改变了,而且REF传参有个特点就是必须是传进的参数必须赋初值,而OUT传参方式却没没有这方面的要求,下面看个OUT的例子:
             Main()
             {
            Console.WriteLine("请输入时间日期:");
            DateTime set;
            string a = Console.ReadLine();
            if (DateTime.TryParse(a, out set))
            {
                Console.WriteLine(set.ToLongDateString());
            }
            else
            {
                Console.WriteLine("输入错误");
            }
            Console.ReadKey();
            }
            上面这个例子是对日期进行操作的例子,我们可以看到SET参数通过读取用户输入的数据进行分析是否是日期格式,用户可以输入为空,或者更本不是日期而是一些字符串格式的数据。并且通过这个例子我们可以看到返回了DateTime.TryParse两个参数,首先是进行DateTime的参数类型的转换是否成功,其后再返回一个DateTime的参数给变量SET,所以SET在声明时候赋值与否,都不会影响最后的SET的值,因为当进行DateTime.TryParse转换时候,就会重新为SET进行赋值。
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值