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

标签 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; }
}

最佳答案

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

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

最后,可以根据字段选择性地指定数据契约(Contract),允许只读属性等:

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

关于c# - 为什么我在编码网站上看到的大多数 DataContract 的 DataMembers 不是使用自动属性编写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3450532/

相关文章:

c# - 在 IIS 或 Windows 服务中托管我的服务?

java - 如何在 catch 和 try 中重构相同值的返回值?

design-patterns - 抛出异常时尝试不同方法的模式

c# - 将double拆分为两个int,一个int在小数点前,一个在小数点后

c# - 将光标设置为网格中的指针

c# - gtk# ScrolledWindow - 滚动到顶部

c# - WCF session 和到数据库的连接

c# - WCF NamedPipe CommunicationException - "The pipe has been ended. (109, 0x6d)."

c++ - 在 C++ 中存储 JSON 对象的设计模式是什么?

c# - 如何限制应该在 OpenFileDialog 中显示哪些文件?