我有一个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;
}
}
}
第二个版本更详细,我看不出任何公共实例变量可能成为问题的原因。有什么理由可以吗?
答案 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)
除了所有其他答案之外,属性还允许在读取或写入属性时运行验证。使用字段时需要做更多的工作。