Я признаю, что часто имеет смысл, когда свойство делает больше, чем просто хранит значение, но, на мой взгляд, ваш пример ужасен. У меня был бы метод , который регистрирует / отменяет регистрацию устройства, и простой метод получения текущего состояния. Мое общее правило заключается в том, что если я выполняю действие, я использую метод, но если я просто изменяю значение, то свойство более подходит. Теперь, как это свойство обрабатывает, что может включать в себя выполнение некоторых вычислений или операций ввода-вывода, но главное - это ожидание потребителя класса.
public void Register()
{
...do some stuff...
this.Registered = true;
}
public void Unregister()
{
...do some stuff...
this.Registered = false;
}
public bool Registered { get; private set; }
Кроме того, я склонен заставлять даже код класса проходить через свойство - это изолирует любые изменения, которые я мог бы внести в работу этого свойства, с самим кодом свойства. Другие части того же класса не должны знать, как работает свойство. Очевидно, что будут исключения - например, когда вы хотите или должны избегать каких-либо вычислений, которые выполняет свойство, но все же необходимо обновить значение - но это мое общее правило.