C#中ref和out

4.ref和out

ref和out属于引用型,而不是普通的值传递。引用型就有点像c++里面的指针,引用不是普通的赋值,而是直接指向对象;

static void Main(string[] args)

        {

            int age = 10;

            int age1=10;

            int age2;

            Intage(age);

            Intage1(ref age1);

            Intage2(out age2);

            Console.WriteLine(age);

            Console.WriteLine(age1);

            Console.WriteLine(age2);

}

//-----------------------------值传递

static void Intage(int age1)//不能改变主函数里面的原值的,因为他相当于赋值了一个参数过来自加1,就如:age1=age=10age1++管你age什么事啊;所以打印age时他还是10

{        {

            age1++;

        }

//--------------------------ref改变外面变量

        static void Intage1(ref int age3)//加了ref就不是简单的值传参数了,而是引用了主函数里面age1;而不是将age1的值赋值给age3age3=age1=10)。

        {

            int age1 = age3 + 1;//这里是重新定义了一个age1和主函数里面的那个age1无关;

            age3++;//虽然这里写成了age3,但他仍然可以改变主函数里面的age1;因为他是引用了age1里面的内容;这里就好像cc++里面的指针,他指向的是age1里面的内容;

        }

说明:10元钱放在一个盒子里面,先是age1拿到了,现在age110元钱了,然后age3通过age1也拿到了这个盒子,age3也有10元钱了,当age3将盒子里面的10元变成12元后,因为age1age3拿的是同一个盒子,所以当age1从盒子里面拿出钱来的时候当然是拿到12元了。

//---------out为外面的变量赋值

        static void Intage2(out int age4)//不要管这里的age4,主要的是看传进来的是谁?,显然是age2,那么age4赋值后将传回给age2;就好像age2=age4age4等于多少age2就等于多少。

        {

            age4 = 20;

         //age4++;//这是不可以的,就算age2先赋值了,也不可以,out是用来给外面的变量赋值的,就算外面已经赋值了,那么out就成了是第二次赋值,变量的值一般来说当然是第二次的值为准了。

        }

说明:1.使用ref之前,参数必须先初始化ref主要是用来内部对外部的值进行改变;

2. 使用out不需要先赋值,也可以先赋值(但通过out后,值将和out所给出的值一直)。out主要用来内部给外部赋值,还有个最主要的就是用来实现多个返回值;

5.多个返回值(out与TryParse)

string s = Console.ReadLine();

            int i;

            if (int.TryParse(s, out i))//TryParse将字符串转换为int型,但他是bool型,就是说他只能返回TRUEFALSE,就是说TryParses(字符串型)转换为iint型)如果转换成功那么就返回true,转换完后i还是i啊,我们并没有给i赋过值啊,只是通过TryPares来转换(转换不一定就是赋值啊,要知道TryPares是返回bool型)这时就需要out来对他赋值了,out就是对外部变量赋值的。out先给i赋值(i=s),然后通过TryPares来转换,如果转换TryPares返回为true那么out赋值成功,如果TryPares返回false,那么out赋值失败(i=0);

trypares必须和out合用。

{

                Console.WriteLine("你输入的值是数字字符{0}", i);

            }

            else

            {

                Console.WriteLine("看看你是什么?{0}",i);//如果转换失败的话,i就为0

            }

注:只有TryPares返回值为true时,out才会对变量赋值,如果TryPares返回为false那么out就不对变量赋值,变量自动为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值