В качестве примера с этого сайта: http://www.c-sharpcorner.com/UploadFile/ankithakur/ExceptionHandlingWCF12282007072617AM/ExceptionHandlingWCF.aspx
[DataContract]
public class MyFaultException
{
private string _reason;
[DataMember]
public string Reason
{
get { return _reason; }
set { _reason = value; }
}
}
Есть ли какая-либо причина, почему этот подход предпочтителен , учитывая, что WCF запущен в .NET 3.0 и C # 3 уже имеет автоматические свойства? Почему это не написано так:
[DataContract]
public class MyFaultException
{
[DataMember]
public string Reason { get; set; }
}
Для полноты, помимо точки зрения Джона, еще один момент заключается в том, что в многих (не во всех) сценариях контракт данных создается из какой-то модели (dbml, EF, wsdl, proto и т. Д.) . Таким образом, нет никаких реальных дополнительных затрат на явные свойства, а явные свойства работают в других языковых версиях.
Кроме того, код шаблона может включать частичные методы, позволяющие выполнять операции до и после выполнения, и другой код платформы. Эта часть шаблона могла быть опущена в опубликованном примере для краткости.
Наконец, контракты данных могут быть дополнительно указаны для поля , разрешая свойства только для чтения и т. Д .:
[DataContract]
public class MyFaultException
{
[DataMember(Name="Reason")]
private string _reason;
public string Reason { get { return _reason; } }
}
C # 3 поставлялся с .NET 3.5, то есть после .NET 3.0.
Конечно, могут быть и другие причины, по которым использование автоматических свойств для свойств DataMember
- плохая идея, но это, безусловно, одна из причин, по которой вы могли видеть такие примеры.
(Следует признать, что страница, которую вы привели в качестве примера, была написана в январе 2008 года, но поскольку VS2008 был выпущен только в ноябре 2007 года, автор вполне мог не обновиться к этому моменту.)