锁定之后的属性';s集合
本文关键字:集合 之后 属性 锁定 | 更新日期: 2023-09-27 18:20:37
我有一个类的属性如下:
public class MyClass
{
private int MyProp { get; set; }
以及使用MyProp的几种方法。一个方法设置它,所有其他方法读取该值。我想做的是,一旦设置了值,就将其设置为其他方法无法更改其值。
谢谢你的建议。
您可以添加在属性值更改时设置的专用字段:
public class MyClass
{
private bool myPropSet = false;
private int myProp;
public int MyProp
{
get
{
return myProp;
}
set
{
if (!myPropSet)
{
myPropSet = true;
myProp = value;
}
}
}
我能想到的最接近的事情是将其设置为只读,这允许您在构造函数中分配它,然后它变成只读。
public class MyClass
{
private readonly int MyProp { get; set; }
public MyClass(int prop)
{
MyProp = prop; // cannot be modified further
}
}
在这种情况下,个人拥有Property公共设置器是不明智的。调用方如何知道setter以前被调用过?如果不做get,他们怎么知道setter设置正确?
我更喜欢这样,这样打电话的人就知道设置是成功的(如果它在乎的话)
public int MyProp { get; private set; }
public bool InitMyProp(int value)
{
if(!_set)
{
MyProp = value;
_set = true;
return true;
}
return false;
}
您可以将其更改为常规属性,而不是自动属性,然后验证setter:
public class MyClass
{
private int _myProp;
private int MyProp
{
get { return _myProp; }
set
{
if (_myProp == 0)
_myProp = value
else
throw new Exception();
}
}
}
如果可以在构造函数中设置值,请参阅只读修饰符。