Подтвердить что ты не робот

Должен ли доступ к переменной внутри одного класса через свойство?

Если у вас есть свойство, которое получает и задает переменную экземпляра, обычно вы всегда используете свойство извне этого класса для доступа к нему.

Мой вопрос в том, должен ли вы всегда делать это внутри класса? Я всегда использовал свойство, если оно есть, даже внутри класса, но хотелось бы услышать некоторые аргументы за и против, которые являются наиболее правильными и почему.

Или это просто вопрос стандартов кодирования, используемых в проекте?

4b9b3361

Ответ 1

Один из более сильных аргументов для доступа к локальным переменным класса (класса) через свойства заключается в том, что вы добавляете уровень абстракции в свой класс. Если вы измените логику любой относительно того, как это поле будет сохранено, остальная часть вашего кода останется без изменений.

Например, вы можете изменить это из локальной переменной на свойство дочернего объекта, на вызов базы данных, на вызов webservice, на статическое свойство класса и так далее. При внесении изменений он дает вам одну точку изменения, свойство, и вам не нужно обновлять остальную часть вашего класса, поскольку все они используют свойство.

Также использование этого свойства позволяет применять бизнес-правила к значению свойства вместо того, чтобы применять одно и то же правило в каждом месте, где вы непосредственно обращались к полю. Опять же, инкапсуляция

С введением автоматических свойств существует еще меньше причин явно иметь локальную переменную, если только вам не нужно применять бизнес-правила для get/set

Ответ 2

Это зависит от того, хотите ли вы применить любую логику, реализованную в настройщике свойств, и поэтому вам действительно нужно принимать решение в каждом конкретном случае.

Когда вы переходите непосредственно в частное поле, вы знаете, что в поле задано именно то, что вы говорите.

Когда вы проходите через Property, значение устанавливается в соответствии с логикой setter, поэтому вы получаете какие-либо бизнес-правила или проверки, которые вы хотите, над значениями, присвоенными этому полю.

Довольно сложно придумать правило о том, что когда это делается, это "правильно", о единственном, что я скажу, я следую за тем, что в инициализации конструктора я почти никогда не использовал свойство.

Ответ 3

Я думаю, что это чистое предпочтение.

Хотя, я нахожу себя в свойствах намного больше в С# 3.0 с поддержкой авто-свойств:

class Foo {
    public string Value { get; set; }

    public void Write() {
        Console.Write(Value);
    }
}

Ответ 4

Как правило, в зависимости от стандартов кодирования проекта я использую "_" или "m", предшествующий имени для моих атрибутов частного класса. (Как показано ниже)

private int mVariable;
private int _Variable;

С теми, кто стоит перед переменной, я сразу признаю, что имею дело с внутренней переменной для класса. Затем, когда дело доходит до отладки позже, я или кто-то еще может сразу заметить, что код имеет дело с внутренней частной переменной и выполняет настройку. Таким образом, это сводится к читаемости для меня.

Ответ 5

Да, я думаю, вы должны использовать свойства внутри своих классов, когда это возможно. Свойства более гибкие и позволяют добавлять логику для проверки ее ценности в центральном месте.

Вы также можете задержать инициализацию поля всякий раз, когда свойство используется вместо того, чтобы принудительно выполнять его в конструкторе (или везде, где используется поле). Пример:

class Test {
   private int _checksum = -1;
   private int Checksum {
      get {
         if (_checksum == -1)
            _checksum = calculateChecksum();
         return checksum;
      }
   }
}

Ответ 6

Всегда использовать свойства. Вот некоторые из причин.

  • Простота использования. В Visual Studio вы можете использовать вкладку "Tab Tab". Вы получите фрагмент свойства
  • Свойства - это элементы языка, к которым обращаются, как если бы они были членами данных.
  • .Net-классы .NET используют его, классы кода привязки данных в свойствах поддержки .NET Framework,
  • Свойства имеют все языковые особенности методов. Свойства могут быть виртуальными