锁定之后的属性';s集合

本文关键字:集合 之后 属性 锁定 | 更新日期: 2023-09-27 18:20:37

我有一个类的属性如下:

public class MyClass
{
   private int MyProp { get; set; }

以及使用MyProp的几种方法。一个方法设置它,所有其他方法读取该值。我想做的是,一旦设置了值,就将其设置为其他方法无法更改其值。

谢谢你的建议。

锁定之后的属性';s集合

您可以添加在属性值更改时设置的专用字段:

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();
        }
    }
}

如果可以在构造函数中设置值,请参阅只读修饰符。