2011-05-12 94 views
2

我有一个Web服务,它将返回一个List,其中Person是一个DTO。是否有任何理由我不应该定义个人似的:ASP.NET Web服务DTO属性vs公共变量

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

,而不是

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

第二个版本是更详细的,我看不出有任何理由公共实例变量可能是一个问题这里。任何可能的原因?

回答

1

一般来说 - 这是一个设计决定 - 请参阅:http://forums.asp.net/t/1233827.aspx 但是DTO的实现稍有不同。由于这只是一个DTO,并且没有设置/获取属性特定实现的行为,因此您可以使用不太详细的方法。任何实现更改都不需要客户端重新编译,因为无论是哪种情况,它们都将以相同的方式通过服务进行序列化,所以您的较小实现很好。但是,如果客户端要将这些类用于数据绑定,那么它们需要是类中的属性。字段不会被绑定。

2

属性优于字段以支持

  • 结合;字段无法绑定
  • 多态性;你不能这样做public virtual string Name;

您可以使用自动属性来减少冗长

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

虽然没有定义哪种服务技术 - 有些代理类是作为字段生成的,而不是属性。 – 2011-05-12 18:57:56

0

除了所有其他的答案,性质允许验证,跑出当从读取属性或写入。使用字段时需要做更多的工作。