[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; }
}
答案 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; } }
}