private int m_stateOfVeryCriticalResource; public int stateOfVeryCriticalResource { get { if (IsAllowedUser()) return m_stateOfVeryCriticalResource; } set { if (IsAdmin()) m_stateOfVeryCriticalResource = value; } } ... stateOfVeryCriticalResource = vcrCompletelyScrewedUp;
В объектно-ориентированном программировании считается "хорошим тоном" организовывать доступ к данным через специальные методы доступа get и set . Однако до недавнего времени эта рекомендация, к сожалению, совершенно не поддерживалась языками программирования. В C# такая языковая возможность наконец-то появилась. Теперь обычное описание поля можно дополнить методами доступа get и set и тогда при любом чтении поля или при присваивании ему значения будет обязательно выполняться функциональность, записанная в этих методах доступа (обратите внимание, что в методе set используется ключевое слово value ).
Методы доступа очень удобны в тех случаях, когда необходимо проверить допустимость присваиваемого значения или достаточность полномочий запрашивающего приложения для доступа к данному полю. Первый случай можно проиллюстрировать таким фрагментом программы:
private int m_AgeOfClient; public int AgeOfClient { get { if (AccessToPersonalInfoAllowed()) return m_AgeOfClient; } set { if (value > 0 & & value <= 120) m_AgeOfClient = value; else MessageBox.Show("This client is not recommended for insurance"); } }
Второй случай возникает, например, в следующей программе:
private int m_stateOfVeryCriticalResource; public int stateOfVeryCriticalResource { get { if (IsAllowedUser()) return m_stateOfVeryCriticalResource; } set { if (IsAdmin()) m_stateOfVeryCriticalResource = value; } } ... stateOfVeryCriticalResource = vcrCompletelyScrewedUp;