c#通过引用或方法更新属性

时间:2012-03-28 19:56:18

标签: c# object methods

一个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设计概念吗?

3 个答案:

答案 0 :(得分:2)

都不是。在这种情况下,使用属性而不是公共字段或显式setter / getter方法:

public class Icon
{
    public string Name {get;set;}
}

属性被编译为setter / getter方法,允许您在以后根据需要更改内部实现,因此仍然需要封装。明确的setter / getter方法对于C#来说不是惯用的。

另见MSDN on properties

答案 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