58同城 网站建设 推广排名,教务系统管理,网页设计网站页面搜索的代码,郑州市网络公司C# ReadOnly ReadOnly先看两种情况1.值类型2.引用类型 结论 Ref Out ReadOnly官方文档 ReadOnly
先看两种情况
1.值类型 当数据是值类型时#xff0c;标记为Readonly时#xff0c;如果再次设置值#xff0c;会提示报错#xff0c;无法分配到只读字段 public class A
{pri… C# ReadOnly ReadOnly先看两种情况1.值类型2.引用类型 结论 Ref Out ReadOnly官方文档 ReadOnly
先看两种情况
1.值类型 当数据是值类型时标记为Readonly时如果再次设置值会提示报错无法分配到只读字段 public class A
{private readonly int x;public A(int x){this.x x;//在构造函数里可以多次赋值但是出了构造函数值类型就无法变更了。this.x x*2;}public void TryToUpdateInt(){//报错无法分配到只读字段x 4;}
}2.引用类型 这里成功给引用类型赋值 public class RefOut
{ private readonly Dictionarystring, int myDictionary new Dictionarystring, int();public RefOut(){// 添加键值对myDictionary.Add(One, 1);myDictionary.Add(Two, 2);}public void TryToAddKeyValuePair(){//这里没有报错运行程序myDictionary.Add(Three, 3);}
}结论 ReadOnly的可读是限定变量的地址不发生改变与变量赋的值无关。 在构造函数里可以多次赋值但是出了构造函数值类型就无法变更了。 值类型因为值类型int a 2每次重新赋值a的地址变了是重新拷贝一份会变成一个新的地址变量的地址发生了变化。所以不能重新设置值类型的值。这里是因为值类型的每次重新赋值地址改变所以宏观表现为设置了ReadOnly就无法再改变数据了。 引用类型,因为引用类型的 List·RefOut· a new List·RefOut· (); 当给集合添加或者删除数据时只是new List·RefOut· ()的数据发生了变化变量a代表的地址并没有进行改变。所以引用类型即使设置了Readonly也可以重新赋值。可以更改为ReadOnlyCollectionT 实现真正意义上的只读。 官方文档原话 Ref Out 用途在将值类型传入方法时如果改变希望方法外的数据也会改变。 Ref Out 可以类比为C中的指针。在C#中传参的值类型int a 0在方法中修改a 3,是不会改变外部的参数值所以还是a0。如果设置了ref或者Out参数则能改变a的值变成a3。 ref的参数必须有初始化值 out的初始化工作必须在方法中进行 RefOut a new();
a.test(6, out int test01);
//ref必须在外部初始化完成
int test02 2;
a.test1(7, ref test02);public class RefOut
{public void test(int b,out int a){//out必须在内部赋值a 2;a ba;Console.WriteLine(a);}public void test1(int b ,ref int a){a b*a;Console.WriteLine(a);}
}