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

Mic*_*uen 9 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑到WCF在.NET 3.0中启动并且C#3已经具有自动属性,是否有任何理由支持这种方法?为什么不写如下?

[DataContract]
public class MyFaultException
{
    [DataMember]
    public string Reason { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

C#3来了.NET 3.5 -即 .NET 3.0.

当然,使用属性的自动属性可能还有其他原因DataMember,但这肯定是你可以看到这样的例子的一个原因.

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


Mar*_*ell 7

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

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

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

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

  • 有关此的任何新信息,或者我们可以假设在2014年使用自动属性是安全的吗?:) (2认同)