el表达式中可以写入一个未被初始化的变量_c#中的关键字in ,out ,ref你知道多少?...

In逆变

保证发送到方法当中的数据不被更改(值类型),当in 修饰符用于引用类型时,可以改变变量的内容,但不能更改变量本身。

Out协变

当希望方法返回多个值时,声明 out方法很有用。使用 out参数的方法仍然可以将变量用作返回类型(请参见 return),但它还可以将一个或多个对象作为 out参数返回给调用方法。

Ref

.NET的关键字 , [1] ref 关键字通过引用(而非值)传递参数。 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中。 例如,如果调用方传递本地变量表达式或数组元素访问表达式,所调用方法会将对象替换为 ref 参数引用的对象,然后调用方的本地变量或数组元素将开始引用新对象。ref是Reference的缩写。

In使用例子

f04f5383a96e0afccff81cf11384854e.png

//in关键字 逆变

public static void TestIn(in int a, int b)

{

// a = 2; 这样的写法是错误的,因为这是 a是只读的,不能进行赋值操作

b = a;

Console.WriteLine("打印下b的值" + b);

}

测试方法的调用

6ee3f7438e06f5f0af6e1b8a16b768fb.png

Console.WriteLine("****************C#中的关键字你知道多少****************");

int a, b;

Console.WriteLine("***************************开始测试逆变in的用法***********************");

a = 2; b = 4;

TestIn(a, b);

运行结果

c7b44540414fa64ebe1c861a122caa80.png

Out的使用例子

457bdfefbfd5b6f57dc85617309ff3a1.png

//out 关键字 协变

public static void TestOut(int a, out int b)

{

b = a;

Console.WriteLine("打印一下b的值" + b);

}

测试方法调用

Console.WriteLine("**********************开始测试协变out的用法*************************");

int t = 2;

int t2; //这时不对t2进行赋值,然后使用t2看会报错么?

TestOut(t, out t2);

Console.WriteLine("打印下t2的值" + t2); //看到t2的值变为2;说明这是不是值拷贝,传递的是参数的地址

运行结果

答案是使用未赋值的t2不会报错

233ab40ff1a8423d29e6cceab3d4a23c.png

由结果可以看出t2的值变为2,说明使用使用out以后传递的是地址,而不是值传递。

Ref的使用例子

532a39d5c9a4be603a8961e0d4b1b566.png

// ref 关键字

public static void TestRef(int a, ref int b)

{

b = a + 2;

Console.WriteLine("打印一下b的值" + b);

}

测试方法调用

Console.WriteLine("*************************开始测试ref的用法***************************************");

//int q = 2;

//int q2;

//TestRef(q,ref q2); //这样是错误的,q2必须初始化

int q = 6;

int q2 = 4;

TestRef(q, ref q2);

Console.WriteLine("打印下q2的值" + q2);

// 发现q2的值变为8,由此也可以发现,使用ref 时也不是值传递,传递的是参数的地址。

// 还可以发现 ref与out的区别 : ref 修饰的在使用时必须进行初始化 ,而用out修饰的不用初始化

运行结果

6aba2c619d6c556fb240cfc9fb54b684.png

总结

ref与out的区别 : ref 修饰的在使用时必须进行初始化 ,而用out修饰的不用初始化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值