我需要使用{get;


Do I need to use { get; set; } with c# fields that have no special actions when getting and setting

我一直在编写这样的类代码:

1
2
3
4
5
6
7
8
public class ReportViewModel
    {
        public string Status;
        public string DataSource;
        public String DataStore { get; set; }
        public PageMeta PageMeta { get; set; }
        public ICollection<Question> List { get; set; }
    }

请注意,大多数字段都使用get;set;,除了我让Visual Studio为我添加的前两个字段。

我想知道的是,我是否真的需要使用get;set;。在我看来,VS2010不会自动添加这个,所以我需要它吗?


您已经创建了一个具有两个公共字段(StatusDataSource和三个公共属性(DataStorePageMetaList的类。我建议不要有公共领域——你应该考虑一下,你是否真的需要所有这些都是可变的属性。

与公共字段相比,使用属性有很多优点,但我认为主要的一点是属性在逻辑上是类的API的一部分,而字段在逻辑上是实现细节。属性说明调用者可以做什么-字段说明如何存储值。


{ get; set; }表示自动实现的属性。在.NET中,属性和字段之间存在差异。通常字段应该是私有的。它们用于某些特定的实现,在大多数情况下应该是类内部的。另一方面,属性用于封装暴露于消费者的行为。


如果您希望它们作为属性正确地公开,是的。


这完全取决于这个类将如何使用。

如果这在您的代码中,只是在当前产品中使用,那么字段(没有{get;set;})和属性(有{get;set;})之间没有太大的区别。

然而,在这种情况下,它们可能不应该是public,而应该是internalprivate,这样外部代码就不应该使用它们了。

如果类将被其他程序集使用,则应始终将公共字段转换为属性。

原因是,如果您希望稍后扩展属性(即向set添加主体),那么您的用户可以从您那里获取新的dll。但是,如果您使用了字段,那么将它们转换为属性在IDE中看起来是一样的,但需要您的用户在获得更改后的dll时重新编译。

身为public告诉消费者,他们可以依靠该会员的存在,身为一个财产可以让你更好地控制你如何将其交付给他们。


这是有区别的。前两个是字段,其余的是自动属性。

第二,编译器生成一个私有的支持字段和一些锅炉板的get/set方法。这样,您就可以像访问字段一样访问属性,但只有属性才具有这些优势。

建议始终隐藏属性后面的字段,方法是将它们设为私有并在其周围写入您自己的属性,或者使用自动属性。

物业有一些优势。一种是可以将属性设置为只读,甚至只写,或使用内部只写等设置为只读。因为它们的行为与方法类似,所以可以在其中执行任意代码。当您需要实现诸如INotifyPropertyChanged之类的东西时,或者如果属性实际上是从它后面的几个字段中计算出来的,那么这将非常有用。

另一个优点是封装。您不是直接将自己绑定到类的字段,而是将自己绑定到属性。因此,如果有关字段的一些细节发生了变化(比如它消失并被计算),那么通过使用属性,您可以将自己与那些实现细节隔离开来。

对于所有情况,您当然应该考虑使用属性(现在添加{ get; set; })。它们是一个很好的实践,因为它们提供了一个封装级别,可以保护用户不受实现特定细节的影响。


如果不添加get和set,则使用的是字段而不是属性。这在很多情况下不会有什么不同。但是,不能像使用属性那样将数据绑定到字段。所以你会输的。


它们是不同的:前两个成员是字段,而不是属性。其他是带有自动实现访问器的属性。


你不必这么做,但这只是一个编码特技,它的优点和缺点。请考虑此链接以获取更多资源:

财产担保人