C#:使用包含它的 class 使字段只能修改

C#: Make a field only modifiable using the class that contains it

我确定在我不知道正确的表达方式之前就有人问过这个问题,所以我找不到我要找的东西。

我有一个 class,其中有一个我希望能够从外部看到的字段,只是不能直接修改它..

public class myclass
{
    public int value;
    public void add1()
    {
        value = value + 1;
    }
}

所以我真的很想只有 'value' 字段 modifiable 来自方法 add1() 但我仍然希望能够看到值'value'.

编辑:我认为只能通过 class myclass 进行修改,但我输入了其他内容。感谢您指出这一点。

public int value { get; private set; }

您无法通过方法 add1 使其仅可修改 ,但您可以通过 myclass.

使其仅可修改

看到这个:

https://msdn.microsoft.com/en-us/library/75e8y5dd.aspx

您可以在不使用 setter 的情况下使用 public 属性 来仅从外部看到 value。将 value 设为私有,使其仅在 calss 中可见。

public class myclass
{
    private int value;
    public void add1()
    {
        value = value + 1;
    }
    public int Value
    {
       get
       {
           return value; 
       }
    }
}

请考虑以下选项来封装字段(即为私有字段值提供 "interface"):

  1. 提供public方法(访问器):

    // ...
    private value;
    // ...
    public void Add()
    {
        ++value;
    }
    
    public int GetValue()
    {
       return value; 
    }
    
  2. 提供 public 属性(唯一访问者):

    // ...
    private value;
    // ...
    
    public void Add()
    {
        ++value;
    }
    
    public int Value
    {
       get { return value; }
    }
    
  3. 提供自动实现的 属性(public 访问器,私有修改器):

    // ...
    // The field itself is not needed: private value;
    // ...
    
    public void Add()
    {
        ++Value;
    }
    
    public int Value { get; private set; }
    

值得注意的是,某些 IDE 或 IDE– 插件提供了适当的重构,称为 "Encapsulate Field"。