Представление членских объектов как свойства или методы в.NET

Вот убедительный пример того, как полезная анонимная функция может быть полезна.

for( var i = 0; i < 10; i++ ) {
  setTimeout(function(){
    console.log(i)
  })
}

Выход: 10, 10, 10, 10, 10...

for( var i = 0; i < 10; i++ ) {
  (function(num){
    setTimeout(function(){
      console.log(num)
    })
  })(i)
}

Выход: 0, 1, 2, 3, 4...

14
задан Don Kirkby 23 November 2008 в 06:45
поделиться

6 ответов

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

метод А должен использоваться, когда у Вас есть некоторая логика, которая делает больше, чем доступ в объекте памяти и возврате того значения или когда Вы выполняете действие, которое имеет широкое влияние на состоянии текущего объекта.

11
ответ дан 1 December 2019 в 07:20
поделиться

Это не важно вопросу.

Это должно быть Свойство, если значение является некоторой деталью о состоянии объекта.

Это должен быть Метод, если это выполняет некоторое действие с объектом.

3
ответ дан 1 December 2019 в 07:20
поделиться

Необходимо использовать свойства для чего-либо, что концептуально представляет состояние объекта, пока его извлечение не является достаточно дорогой операцией, что необходимо неоднократно избегать использования его.

От MSDN:

разработчики Библиотеки классов часто должны решать между реализацией участника класса как свойство или метод. В целом методы представляют действия, и свойства представляют данные. Используйте следующие инструкции, чтобы помочь Вам выбрать между этими опциями.

  • Использование свойство, когда участник является логическим элементом данных. В объявлениях следующего члена Имя является свойством, потому что это - логический член класса.

    public string Name
    get 
    {
        return name;
    }
    set 
    {
        name = value;
    }
    
  • Использование метод, когда:

    • операция является преобразованием, таким как Объект. ToString.
    • операция является достаточно дорогой, который Вы хотите передать пользователю, что они должны рассмотреть кэширование результата.
    • Получение значения свойства с помощью получить средства доступа имело бы заметный побочный эффект.
    • Вызов участника дважды по очереди приводит к различным результатам.
    • порядок выполнения важен. Обратите внимание, что свойства типа должны быть в состоянии быть установленными и полученными в любом порядке.
    • участник статичен, но возвращает значение, которое может быть изменено.
    • участник возвращает массив. Свойства, что возвращаемые массивы могут быть очень вводящими в заблуждение. Обычно необходимо возвратить копию внутреннего массива так, чтобы пользователь не мог изменить внутреннее состояние. Это, вместе с тем, что пользователь может легко принять это, является индексируемым свойством, приводит к неэффективному коду. В следующем примере кода каждый вызов к свойству Methods создает копию массива. В результате 2n+1 копии массива будут созданы в следующем цикле.

      Type type = // Get a type.
      for (int i = 0; i < type.Methods.Length; i++)
      {
         if (type.Methods[i].Name.Equals ("text"))
         {
            // Perform some operation.
         }
      }
      

следующий пример иллюстрирует корректное использование свойств и методов.

    class Connection
    {
       // The following three members should be properties
       // because they can be set in any order.
       string DNSName {get{};set{};}
       string UserName {get{};set{};}
       string Password {get{};set{};}

       // The following member should be a method
       // because the order of execution is important.
       // This method cannot be executed until after the 
       // properties have been set.
       bool Execute ();
    }
20
ответ дан 1 December 2019 в 07:20
поделиться

Обзор

Обычно свойства хранят данные для объекта, такой как Имя , и методы являются действиями, которые объект можно попросить выполнить, такой как Перемещение или Шоу . Иногда это не очевидно, какие участники класса должны быть свойствами и который должен быть методами - Объект , метод класса набора (VB) хранит и получает данные и может быть реализован как индексируемое свойство. С другой стороны, также было бы разумно реализовать Объект как метод.

Синтаксис

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

при реализации члена класса как свойство необходимо изменить, это - значение этот путь:

ThisObject. ThisProperty (Индекс) = NewValue

, если участник класса реализован как метод, изменяемое значение, должен быть изменен с помощью arguement:

ThisObject. ThisProperty (Индекс, NewValue)

Ошибки

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

1
ответ дан 1 December 2019 в 07:20
поделиться

Свойство. Свойство является в основном просто 'дешевым' методом. Получение или установка ссылки на объект являются довольно дешевыми.

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

1
ответ дан 1 December 2019 в 07:20
поделиться

Чтение свойств и присваивает значения экземплярам в классе.

Методы делают что-то с данными, присвоенными классу.

1
ответ дан 1 December 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: