C # - типы свойств, и когда использовать один над другим - PullRequest
0 голосов
/ 08 ноября 2018

Я изучал свойства C #, и меня немного смущает то, что вы получаете от некоторых предлагаемых примеров, таких как Microsoft .

Пример их свойства класса выглядит следующим образом:

public class SaleItem
{
   string name;
   decimal cost;

   public SaleItem(string name, decimal cost)
   {
      this.name = name;
      this.cost = cost;
   }

   public string Name 
   {
      get => name;
      set => name = value;
   }

   public decimal Price
   {
      get => cost;
      set => cost = value; 
   }
}

Что дает их пример, когда вы объявляете свойства класса, такие как:

public class SaleItem
{
   public string Name { get; set; };
   public decimal Cost { get; set; };

   public SaleItem(string name, decimal cost)
   {
      Name = name;
      Cost = cost;
   }
}

Я думаю, использование this и => сбивает меня с толку, так как я не слишком знаком с ними, но я, как правило, не понимаю, в чем разница между этими двумя примерами, или почему вы можете выбрать один над другим.

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

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Ключевое слово this используется для текущего экземпляра класса. При таком подходе вы можете получить доступ к членам внутри конструкторов, методов экземпляров и методов доступа к экземплярам.

this ключевое слово используется, когда вы хотите сослаться на экземпляр. Затем можно вызвать Ans для выполнения некоторого вычисления, связанного с этим экземпляром.

Используя автоматически реализованные свойства, вы можете упростить свой код, в то время как компилятор C # прозрачно предоставит вам вспомогательное поле.

public string Name { get; set; };
public decimal Cost { get; set; }

Свойства могут быть записаны с простым лямбда-синтаксисом вместо необходимости писать полное тело

public string Name 
   {
      get => name;
      set => name = value;
   }

Expression-bodied добавлены для улучшения объявления свойств. Вместо блоков операторов теперь можно определить тело как лямбда-выражение. Синтаксис довольно прост в использовании =>.

0 голосов
/ 08 ноября 2018

В примере 1 вы на самом деле получаете возможность закодировать свои свойства с относительно небольшими усилиями. В то время как пример 2 - это Авто-Реализация.

Я обычно предпочитаю свойства автоинсталляции (случай 2). На самом деле реализация любой логики вторична для меня. Я обычно использую Proeprties, и авто-внедряемые являются самым коротким способом их написания. Я полностью избегаю полей.

Я не вижу никаких преимуществ в случае 1. Это может быть их способ продемонстрировать какую-то новую механику. Какой-то способ закодировать свойства без всяких дополнительных затрат в скобках. Похоже, что лямбда, но кто-то еще упомянул, что это не так.

Во всяком случае, я должен критиковать cas 1. Одна из самых больших опасностей свойств - это случайное использование вспомогательных полей в коде класса. Этого никогда не должно случиться. И наличие вспомогательных полей только в нижнем регистре - это , а не - это реальный способ избежать этого. На самом деле, собственный стандарт Micrsoft состоит в том, чтобы начинать поля с символа подчеркивания "_", чтобы не было путаницы.

"имя" и "имя"? Легко перепутать. Я не могу вспомнить, как часто я печатал быстро, и начальная буква в верхнем регистре не распознавалась.

"_ Имя" и "Имя"? Черт возьми, все сложнее смешать и сразу увидеть, если ты это сделаешь.

0 голосов
/ 08 ноября 2018

Первый набор элементов использует более новый синтаксис, называемый Expression-Bodied Members, который позволяет вам писать выражения в кратком формате.Их НЕ следует путать с лямбда-выражениями, несмотря на использование аналогичного синтаксиса (спасибо gunr2171)!

public string Name 
   {
      get => name; // exactly the same as "get { return name; }"
      set => name = value; // exactly the same as "set { name = value; }"
   }

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

Ключевое слово "this" является чем-то особенным для объектов.Вы можете использовать ключевое слово «this» для доступа к своим свойствам, методам и другим элементам вашего экземпляра объекта, хотя ваш IDE / компилятор выведет их автоматически, поэтому вам не нужно писать

this.Name

и может вместо этого написать

Имя

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

Два приведенных выше примера логически эквивалентны, просто написаны по-разному.Важно понимать лямбда-выражения, но я думаю, что в этом случае Microsoft просто показывает вам, что возможно, и шаблон 'getter' и 'setter' НАМНОГО более распространен в моем опыте (и ваша команда, вероятно, будет благодарна вам за использование этого синтаксиса какхорошо!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...