一个noob问题,但是:
我有一个自定义类定义为:
public class Icon
{
string name;
int value;
public void setName(string nameIn)
{
name = nameIn;
}
public void setValue(int valueIn)
{
value = valueIn;
}
}
使用以下方法从同一应用程序域中的另一个类更新对象属性(在本例中是从Icon类型的数组中)是否更好?
fm.iconData[0].setName("Plum");
或者最好通过将Icon类中的实例变量修饰符更改为“public”来设置并使用:
fm.iconData[0].name = "Plum";
这打破了任何OO设计概念吗?
答案 0 :(得分:2)
都不是。在这种情况下,使用属性而不是公共字段或显式setter / getter方法:
public class Icon
{
public string Name {get;set;}
}
属性被编译为setter / getter方法,允许您在以后根据需要更改内部实现,因此仍然需要封装。明确的setter / getter方法对于C#来说不是惯用的。
答案 1 :(得分:0)
Name
是一个简单属性的明显例子。将它设为属性(不是公共字段)并为其赋值:
fm.iconData[0].Name = "Plum";
将此属性定义如下:
public string Name {get;set;}
答案 2 :(得分:0)
正如其他人所说,这应该是一个财产。如果您计划向属性添加额外的逻辑(例如验证,引发事件),您可以像这样定义属性:
public class Icon
{
string name;
public string Name
{
get { return name; }
set
{
// custom logic can go here...
name = value; // value is whatever has been set to this property
}
}
}
name
仅在课堂上可见,因为它是私人的。外部可以看到Name
。