我有一个类,有这样的属性:
public class MyClass
{
private int MyProp { get; set; }
以及使用MyProp的几种方法。一种方法设置它,所有其他方法读取值。我想做的是,一旦设定了价值,就让其它方法无法改变其价值。
感谢您的建议。
答案 0 :(得分:5)
您可以添加属性值更改时设置的私有字段:
public class MyClass
{
private bool myPropSet = false;
private int myProp;
public int MyProp
{
get
{
return myProp;
}
set
{
if (!myPropSet)
{
myPropSet = true;
myProp = value;
}
}
}
答案 1 :(得分:2)
我能想到的最接近的事情就是将它设置为只读,这允许你在构造函数中分配它,然后它就变成了只读。
public class MyClass
{
private readonly int MyProp { get; set; }
public MyClass(int prop)
{
MyProp = prop; // cannot be modified further
}
}
答案 2 :(得分:1)
在这种情况下,个人拥有财产公共制定者并非直观。调用者如何知道之前已经调用过setter?如果没有得到get,他们怎么知道setter设置正确?
我更喜欢这样,所以调用者知道该集合是成功的(如果它关心)
public int MyProp { get; private set; }
public bool InitMyProp(int value)
{
if(!_set)
{
MyProp = value;
_set = true;
return true;
}
return false;
}
答案 3 :(得分:0)
您可以将其更改为传统属性而不是自动属性,然后验证setter:
public class MyClass
{
private int _myProp;
private int MyProp
{
get { return _myProp; }
set
{
if (_myProp == 0)
_myProp = value
else
throw new Exception();
}
}
}
答案 4 :(得分:0)
如果您可以在构造函数中设置值,请参阅readonly修饰符。