c # обновить атрибут с помощью ссылки или метода - PullRequest
1 голос
/ 28 марта 2012

Немного нубский вопрос, но:

У меня есть собственный класс, определенный как:

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";

Это нарушает какие-либо концепции ОО?

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Ни. В этом случае используйте свойство вместо открытого поля или явных методов установки / получения:

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

Свойства компилируются до методов установки / получения, что позволяет вам позже при необходимости изменить внутреннюю реализацию, сохраняя инкапсуляцию Явные методы установки / получения не идиоматичны для C #.

Также см. MSDN для свойств .

0 голосов
/ 29 марта 2012

Как все говорили, это должно быть собственностью. Если вы планируете добавить дополнительную логику к свойству (например, проверку, создание событий), вы можете определить это свойство следующим образом:

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 виден снаружи.

0 голосов
/ 28 марта 2012

Name является наглядным примером простого свойства.Сделайте это свойство (не открытое поле) и присвойте ему значение:

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

Определите это свойство следующим образом:

public string Name {get;set;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...