ASP.NET Web服务DTO属性与公共变量

时间:2011-05-12 17:12:42

标签: c# asp.net web-services

我有一个Web服务,它将返回一个List,其中Person是DTO。有什么理由我不应该定义像:

public class Person {
    public string Name;
    public string Email;
}

而不是

public class Person {
    private string _name;
    public string Name {
      get {
       return _name;
      }
      set {
       _name = value;
      }
   }
}

第二个版本更详细,我看不出任何公共实例变量可能成为问题的原因。有什么理由可以吗?

3 个答案:

答案 0 :(得分:2)

属性比支持

的字段更受欢迎
  • 结合;字段无法绑定
  • 多态性;你做不到public virtual string Name;

您可以使用自动属性来减少详细程度

public class Person {
    public string Name { get; set; }
    public string Email { get; set; }
}

答案 1 :(得分:1)

一般而言 - 这是一项设计决策 - 请参阅:http://forums.asp.net/t/1233827.aspx 但DTO的实施略有不同。由于这只是一个DTO,并且没有没有set / get属性特定实现的行为,因此您也可以使用较不详细的方法。任何实现更改都不需要客户端重新编译,因为它们将通过服务以相同的方式进行序列化,因此您的较小实现很好。

但是,如果客户端要使用这些类进行数据绑定,则需要将它们作为类中的属性。字段不受约束。

答案 2 :(得分:0)

除了所有其他答案之外,属性还允许在读取或写入属性时运行验证。使用字段时需要做更多的工作。