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
.
使其仅可修改
看到这个:
您可以在不使用 setter 的情况下使用 public 属性 来仅从外部看到 value
。将 value
设为私有,使其仅在 calss 中可见。
public class myclass
{
private int value;
public void add1()
{
value = value + 1;
}
public int Value
{
get
{
return value;
}
}
}
请考虑以下选项来封装字段(即为私有字段值提供 "interface"):
提供public方法(访问器):
// ...
private value;
// ...
public void Add()
{
++value;
}
public int GetValue()
{
return value;
}
提供 public 属性(唯一访问者):
// ...
private value;
// ...
public void Add()
{
++value;
}
public int Value
{
get { return value; }
}
提供自动实现的 属性(public 访问器,私有修改器):
// ...
// The field itself is not needed: private value;
// ...
public void Add()
{
++Value;
}
public int Value { get; private set; }
值得注意的是,某些 IDE 或 IDE– 插件提供了适当的重构,称为 "Encapsulate Field"。
我确定在我不知道正确的表达方式之前就有人问过这个问题,所以我找不到我要找的东西。
我有一个 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
.
看到这个:
您可以在不使用 setter 的情况下使用 public 属性 来仅从外部看到 value
。将 value
设为私有,使其仅在 calss 中可见。
public class myclass
{
private int value;
public void add1()
{
value = value + 1;
}
public int Value
{
get
{
return value;
}
}
}
请考虑以下选项来封装字段(即为私有字段值提供 "interface"):
提供public方法(访问器):
// ... private value; // ... public void Add() { ++value; } public int GetValue() { return value; }
提供 public 属性(唯一访问者):
// ... private value; // ... public void Add() { ++value; } public int Value { get { return value; } }
提供自动实现的 属性(public 访问器,私有修改器):
// ... // The field itself is not needed: private value; // ... public void Add() { ++Value; } public int Value { get; private set; }
值得注意的是,某些 IDE 或 IDE– 插件提供了适当的重构,称为 "Encapsulate Field"。