Зачем мне частное поле, доступное через публичную собственность? - PullRequest
2 голосов
/ 28 января 2010

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

Я знаю, что с C # 3.0 или выше я могу использовать автоматические свойства. Мне нравится еще больше:).

Мой вопрос касается (возможно, более старого) кода, где я могу увидеть это:

   private int age;

   public int Age {

     get { return age; }
     set { age = value; }     
   }

Зачем мне возраст частного поля? Что я на самом деле скрываю здесь?

EDIT:

Я полностью понимаю необходимость использования геттера и сеттера. Я упомянул, что я из мира Java и делаю это все время.

Я понимаю, что автоматические свойства в C # 3.0 или выше являются синтетическим сахаром. Но, возможно, мой вопрос имеет более простой ответ. Означает ли это, что (ниже C # 3.0) свойство не имеет никакого значения. Таким образом, он должен получить значение из какого-то другого поля?

Ответы [ 11 ]

0 голосов
/ 28 января 2010

Свойства - это просто хороший способ написать пару методов get и set . В Java вы могли бы сделать это:

private int age;

public int getAge() { return age; }
public void setAge(int value) { age = value; }

Вам нужно личное поле, чтобы где-то хранить возраст - getAge и setAge - это просто методы.

То же самое относится к C # для версий до 3.0:

private int age;

public int Age
{
   get { return age; }
   set { age = value; } 
}

Это метод get и set, просто скомпонованный так, что вы можете написать x.Age = 21 вместо x.setAge(21).

С автоматическими свойствами компилятор C # генерирует для вас приватное поле (но оно все еще там!):

public int Age
{
   get;
   set;
}

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

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

private int age;

public int Age
{
   get { return age; }
   set { if (value < 0) throw new ArgumentException(); age = value; } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...