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

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

9
задан Marcus Mangelsdorf 4 May 2015 в 08:30
поделиться

2 ответа

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

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

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

[DataContract]
public class MyFaultException
{
    [DataMember(Name="Reason")]
    private string _reason;
    public string Reason { get { return _reason; } }
}
7
ответ дан 4 December 2019 в 14:26
поделиться

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

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

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

7
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: