Свойства в С# - программирование
Подтвердить что ты не робот

Свойства в С#

Почему мы можем писать

public int RetInt
{
   get;set;
}

вместо

public int RetInt
{
   get{return someInt;}set{someInt=value;}
}

В чем разница между двумя?

4b9b3361

Ответ 1

Эта функция называется автоматически реализованные свойства и введена с С# 3.0

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

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

По вашему вопросу

В чем разница между двумя?

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

private int someInt;
public int RetInt
{
    get
    {
        if (someInt > 0)
            return someInt;
        else
            return -1;
    }
    set { someInt = value; } // same kind of check /validation can be done here
}

Вышеизложенное не может быть выполнено с помощью свойств Auto реализованного.

Еще одна вещь, где вы можете видеть разницу, - это инициализировать свойство пользовательского типа класса.

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

private List<MyClass> list = new List<MyClass>();
public List<MyClass> List
{
    get { return list; }
    set { list = value; }
}

В случае свойства Auto реализовано

public List<MyClass> SomeOtherList { get; set; }

Вы можете только инициализировать SomeOtherList в конструкторе, вы не можете сделать это на полевом уровне.

Ответ 2

Как эти два разных?

По крайней мере, на 2 пункта различаются:

  • В обычном свойстве вам нужно определить поле до (someInt в вашем случае)
  • В обычном свойстве вы можете установить точку останова в модификаторы set/get, вместо этого свойство auto не может этого сделать.

Другими словами: если вам нужно "просто свойство", используйте авто-свойства, если вам нужно больше контролировать рабочий процесс (поднять событие на set, отлаживать, запускать другие вещи внутри), использовать "обычные" свойства.

Ответ 3

Это автоматически реализуемые свойства. Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/bb384054.aspx.

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

Ответ 4

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

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

Если вам нужно только его использовать из-за пределов вашего класса (или в большинстве случаев), вы можете пойти с "новым" способом (1-й)