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)
C#3来了.NET 3.5 -即后 .NET 3.0.
当然,使用属性的自动属性可能还有其他原因DataMember,但这肯定是你可以看到这样的例子的一个原因.
(不可否认,您作为示例提供的页面是在2008年1月写的 - 但由于VS2008仅在2007年11月发布,因此作者可能还没有升级过.)
只是为了完整性超出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)