C#:使用包含它的类使一个字段只能修改

时间:2015-08-20 23:40:14

标签: c# class encapsulation

我确信在我不知道正确的说法之前已经问过这个问题所以我找不到我要找的东西。

我有一个带有字段的类,我想从外面看到,只是无法直接修改它。

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

所以我真的希望只从方法add1()获得'value'字段可修改,但我仍然希望能够看到'value'的值。

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

3 个答案:

答案 0 :(得分:4)

public int value { get; private set; }

您无法通过方法add1对其进行修改 ,但您只能通过myclass修改

见:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

请考虑以下选项来封装字段(即为私有字段值提供“接口”):

  1. 提供公共方法(访问者):

    // ...
    private value;
    // ...
    public void Add()
    {
        ++value;
    }
    
    public int GetValue()
    {
       return value; 
    }
    
  2. 提供公共财产(仅限访问者):

    // ...
    private value;
    // ...
    
    public void Add()
    {
        ++value;
    }
    
    public int Value
    {
       get { return value; }
    }
    
  3. 提供自动实现的属性(public accessor,private mutator):

    // ...
    // The field itself is not needed: private value;
    // ...
    
    public void Add()
    {
        ++Value;
    }
    
    public int Value { get; private set; }
    
  4. 值得注意的是,某些IDE或IDE插件提供了称为“封装字段”的适当重构。