Что такое автоматические свойства В C# и какова их цель?

может ли кто-нибудь дать очень простое объяснение автоматических свойств в c#, их цели и, возможно, некоторых примеров? Постарайтесь, пожалуйста, сохранить все в непрофессиональных терминах!

7 ответов


автоматические свойства используются, когда в аксессорах свойств не требуется дополнительная логика.
Декларация будет выглядеть примерно так:--4-->

public int SomeProperty { get; set; }

Они просто синтаксический сахар, поэтому вам не нужно будет писать следующий более длинный код:

 private int _someField;
 public int SomeProperty 
 {
    get { return _someField;}
    set { _someField = value;}
 }

Edit: немного расширяясь, они используются, чтобы облегчить наличие частных переменных в классе, но позволить им быть видимыми вне класса (без возможности их изменения)

О, и еще одно преимущество с автоматическими свойствами вы можете использовать их в интерфейсах! (Которые не позволяют переменные-члены любого рода)

С нормальными свойствами, вы можете сделать что-то вроде:

private string example;
public string Example 
{
    get { return example; }
    set { example = value; }
}

автоматические свойства позволяет создать что-то действительно лаконичное:

public string Example { get; set; }

поэтому, если вы хотите создать поле, где оно было настроено только внутри класса, вы можете сделать:

public string Example { get; private set; }

Это было бы эквивалентно:

private string example;
public string Example 
{
    get { return example; }
    private set { example = value; }
}

или на Java:

private String example;

public String getExample() {
    return example;
}

public void setExample(String value) {
    example = value;
}

Edit: @Paya также предупредил меня кому:


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

один важный принцип дизайна что вы никогда выставляем поля как public, но лучше всегда все через свойства. Это связано с тем, что вы никогда не можете сказать, когда поле доступно и, что более важно, когда оно установлено. Теперь, много времени, нет никакой обработки, необходимой при установке или получении значения (например, диапазон проверочный.) Именно поэтому были созданы автоматические свойства. Это простой, однострочный способ создания свойства. Резервное хранилище для него создается компилятором.

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


Они просто ярлык кодирования, чтобы сохранить программист несколько нажатий клавиш. Вместо того чтобы печатать все это:

private string _lastName;
public string LastName {
    get {
        return _lastName;
    }
    set {
        _lastName = value;
    }
}  

вы можете просто ввести:

public string LastName {
    get; set;
} 

и пусть компилятор генерирует остальное автоматически.


С Автоматически Реализованные Свойства (Руководство По Программированию На C#):

В C# 3.0 и более поздних версиях автоматически реализуемые свойства делают объявление свойств более лаконичным, когда не требуется дополнительная логика в методах доступа к свойствам. Они также позволяют клиентскому коду создавать объекты.
При объявлении свойства компилятор создает частное анонимное резервное поле, доступ к которому возможен только через get и set свойства средство доступа.

class Person
{
       public string Name { get; set; }
}

Iמ более ранние версии C#, чтобы использовать свойства, вам нужно будет создать поле для хранения значения (называемого резервным хранилищем):

private string _something;
public string Prop { get { return _something; } }

начиная с C# 3.0, это требование больше не требуется, и компилятор автоматически создаст резервное хранилище для вас, поэтому нет необходимости объявлять поле _something.

можно подробнее по этому вопросу здесь: http://msdn.microsoft.com/en-us/library/bb384054.aspx

Надежда эта помощь.


упрощение принятый ответ, вы можете использовать:

public int SomeProperty { get; private set; }

Он имеет тот же эффект, и вам больше не нужно создавать другую переменную для этого.