Почему большинство DataMembers DataContract, которые я вижу на сайтах для кодирования, не написаны с использованием автоматических свойств? - PullRequest
9 голосов
/ 10 августа 2010

В качестве примера с этого сайта: 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; }
}

Ответы [ 2 ]

7 голосов
/ 10 августа 2010

Просто для полноты, выходящей за пределы точки зрения Джона, другой момент здесь заключается в том, что в многих (не во всех) сценариях контракт данных генерируется из какой-либо модели (dbml, EF, wsdl, proto и т. Д.),Таким образом, нет явных дополнительных затрат на явные свойства, а явные свойства работают на большем количестве языковых версий.

Кроме того, код шаблона может включать в себя частичные методы, позволяющие выполнять операции до / после операции,и другие рамки кода.Эта часть шаблона может быть опущена в опубликованном примере для краткости.

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

[DataContract]
public class MyFaultException
{
    [DataMember(Name="Reason")]
    private string _reason;
    public string Reason { get { return _reason; } }
}
7 голосов
/ 10 августа 2010

C # 3 поставляется с .NET 3.5 - то есть после .NET 3.0.

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

(по общему признанию, страница, которую вы привели в качестве примера, была написана в январе 2008 года - но поскольку VS2008 был выпущен только в ноябре 2007 года, авторвполне может не обновиться к этому моменту.)

...