为什么我在编码网站上看到的大多数DataContract的DataMembers都不是使用自动属性编写的?

时间:2010-08-10 15:19:59

标签: c# wcf design-patterns

以此网站为例: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 个答案:

答案 0 :(得分:7)

C#3附带.NET 3.5 - 即之后的 .NET 3.0。

当然,使用DataMember属性的自动属性可能还有其他原因,但这肯定是您可以看到这样的示例的原因之一。

(不可否认,您作为示例提供的页面是在2008年1月写的 - 但由于VS2008仅在2007年11月发布,因此作者可能还没有升级过。)

答案 1 :(得分:7)

只是为了完整性超出Jon的观点,另一点是在许多(并非所有)场景中,数据契约是从某种模型(dbml,EF,wsdl,proto等)生成的。 )。因此,显式属性没有真正的额外成本,而显式属性适用于更多语言版本。

此外,模板代码可能包括允许前/后操作的部分方法,以及其他框架代码。为简洁起见,可能已从已发布的示例中省略了该模板的该部分。

最后,可以选择根据字段指定数据合同,允许只读属性等:

[DataContract]
public class MyFaultException
{
    [DataMember(Name="Reason")]
    private string _reason;
    public string Reason { get { return _reason; } }
}