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

本文关键字:方法 更新 属性 引用 | 更新日期: 2023-09-27 18:29:14

有点小问题,但:

我有一个自定义类定义为:

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的设计概念?

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

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

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

属性被编译为setter/getter方法,该方法允许您稍后在需要时更改内部实现,因此仍然尊重封装。显式setter/getter方法不是C#的惯用方法。

另请参阅MSDN的属性。

Name是一个简单属性的明显示例。将其作为属性(而不是公共字段)并为其赋值:

fm.iconData[0].Name = "Plum";

将此属性定义为:

public string Name {get;set;}

正如其他人所说,这应该是一个属性。如果你计划向属性添加额外的逻辑(例如验证、引发事件),你可以这样定义属性:

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在外部可见。