Почему мы можем писать
public int RetInt
{
get;set;
}
вместо
public int RetInt
{
get{return someInt;}set{someInt=value;}
}
В чем разница между двумя?
Почему мы можем писать
public int RetInt
{
get;set;
}
вместо
public int RetInt
{
get{return someInt;}set{someInt=value;}
}
В чем разница между двумя?
Эта функция называется автоматически реализованные свойства и введена с С# 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 пункта различаются:
someInt
в вашем случае)set/get
, вместо этого свойство auto не может этого сделать.Другими словами: если вам нужно "просто свойство", используйте авто-свойства, если вам нужно больше контролировать рабочий процесс (поднять событие на set
, отлаживать, запускать другие вещи внутри), использовать "обычные" свойства.
Это автоматически реализуемые свойства. Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/bb384054.aspx.
Основная причина, по которой они были введены, заключалась в том, чтобы уменьшить накладные расходы программиста на создание частной переменной типа someInt
, которая имела мало пользы, чем использование в свойстве.
На самом деле это не совсем разные, в обоих случаях у вас есть частное поле, которое соответствует вашему свойству, но в первом случае оно генерируется компилятором и скрыто.
Если вам нужно часто использовать переменную за свойством в своем классе, я думаю, что лучше объявить ваше свойство старым способом (2-й), потому что каждый раз, когда вы будете получать к нему доступ, это вызовет получателя, если вы это сделаете это "новый" способ.
Если вам нужно только его использовать из-за пределов вашего класса (или в большинстве случаев), вы можете пойти с "новым" способом (1-й)