代码之家  ›  专栏  ›  技术社区  ›  Michael Buen

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

  •  9
  • Michael Buen  · 技术社区  · 14 年前

    以本网站为例: 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; }
        }
    }
    

    考虑到在.NET 3.0和C_3中启动的WCF已经具有自动属性,是否有任何理由支持这种方法?为什么它不是这样写的?

    [DataContract]
    public class MyFaultException
    {
        [DataMember]
        public string Reason { get; set; }
    }
    
    2 回复  |  直到 9 年前
        1
  •  7
  •   Marc Gravell    14 年前

    为了完成乔恩的观点,这里的另一个观点是 许多的 (并非所有)场景数据契约是从某种模型(DBML、EF、WSDL、Proto等)生成的。因此,没有真正的附加 成本 为了显式属性,显式属性在更多的语言版本上工作。

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

    最后,可以根据 领域 ,允许只读属性等:

    [DataContract]
    public class MyFaultException
    {
        [DataMember(Name="Reason")]
        private string _reason;
        public string Reason { get { return _reason; } }
    }
    
        2
  •  7
  •   Jon Skeet    14 年前

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

    当然,使用自动属性可能是一个坏主意的其他原因 DataMember 属性,但这当然是您可以看到类似示例的一个原因。

    (不可否认,作为例子,您给出的页面是在2008年1月编写的,但是由于VS2008仅在2007年11月发布,作者可能还没有升级到这个程度。)