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

Вопрос о сокращенной собственности С#

Итак, вот немного синтаксиса, который я никогда раньше не видел, может кто-нибудь сказать мне, что это значит? Не уверен, что это должно быть некоторой стенографией для объявления абстрактного свойства или чего-то или чего-то.

public Class1 myVar { get; set; }

Для чего его ценность, Class1 является абстрактным классом.

4b9b3361

Ответ 1

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

// Auto-Impl Properties for trivial get and set
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerID { get; set; }

Ответ 2

Это синтаксис, позволяющий компилятору создать для вас (скрытое) поле.

Также очень полезно:

public Class1 myVar{ get; private set; }

Ответ 3

Он может выглядеть как абстрактный объект или свойство из интерфейса, но он далек от него. Чтобы побудить разработчиков использовать свойства (поскольку они являются передовой практикой по многим причинам), Microsoft решила включить эту функцию в С# 3, чтобы позволить вам объявлять свойства с большей легкостью.

Вот стандартный способ создания свойства:

String foo;

public String Foo
{
    get { return this.foo }
    set { this.foo = value; }
}

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

Теперь с компилятором С# 3 мы можем сделать это:

public String Foo { get; set; }

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

[CompilerGenerated]    
private string <Foo>k__BackingField;

public string Foo
{
    [CompilerGenerated]
    get
    {
        return this.<Foo>k__BackingField;
    }
    [CompilerGenerated]
    set
    {
        this.<Foo>k__BackingField = value;
    }
}

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

Ответ 4

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

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

Ответ 5

Это стенограмма для свойства, которое ничего не делает для хранения значения в поле. Таким образом, это будет эквивалентно:

private Class1 _myVar;

public Class1 myVar
{
  get{ return _myVar; }
  set{ _myVar = value;}
}

Простое свойство, которое yoy может заменить более сложным evantuation в более позднее время без изменения интерфейса.

Ответ 6

Это свойства Auto-Implemented. Они позволяют сделать код более кратким. Подробнее о них вы можете узнать здесь:

Автоматическая реализация

Вы также можете сделать доступ у аксессуаров разными уровнями доступа:

public int MyVar {get; частный набор; }

Это позволяет вам выставлять свойство, внешнее по отношению к классу, и по-прежнему устанавливать его внутри.

Ответ 7

Автоматические геттеры и сеттеры.