C#: Свойства
Люди, пришедшие из C ++ знают проблему ограничения доступа к переменным класса. В общем случае никогда не следует выставлять переменные класса, чтобы другие классы могли изменять его без уведомления класса. Поэтому следующий написанный код, довольно часто встречается в C ++ (код, приведен на C #):
private int myVariable;
public int GetMyVariable()
{
return myVariable;
}
public void SetMyVariable(int value)
{
myVariable = value;
}
Это чистый код, и мы (как разработчики) теперь имеем возможность реагировать на внешние изменения переменных, вставляя некоторые строки кода раньше
myVariable = value
. Проблема с этим кодом заключается в том, что- мы действительно хотим только показать, что это всего лишь обертка вокруг
myVariable
- нам нужно написать слишком много кода для этого простого шаблона.
Поэтому команда C # представила новую языковую функцию, называемую свойствами. Используя свойства, приведенный выше код сводится к:
private int myVariable;
public int MyVariable
{
get { return myVariable; }
set { myVariable = value; }
}
Теперь код выглядит намного чище. Также был изменен доступ. Вместо того, чтобы получать доступ к
myVariable
как к методу (используя a = GetMyVariable()
или SetMyVariable(b)
), мы можем обращаться к myVariable как к переменной (используя a = MyVariable
или MyVariable = b
).
Внутренне компилятор все равно будет создавать эти методы (get / set), но мы не заботимся об этом. Мы будем использовать свойства только с
get
блоком, set
блоком или с обоими, и все будет работать.
Обратите внимание, что Microsoft Visual C++ также имеет расширение в виде
__declspec
ключевого слова, что дает нам возможность писать свойства на C++, аналогичные свойствам C #.