我需要使用{get; 组; 获取和设置时没有特殊操作的c#字段

我一直在编写这样的类:

public class ReportViewModel { public string Status; public string DataSource; public String DataStore { get; set; } public PageMeta PageMeta { get; set; } public ICollection List { get; set; } } 

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

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

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

您已经创建了一个包含两个公共字段StatusDataSource )和三个公共属性DataStorePageMetaList )的类。 我建议不要使用公共字段 – 你应该考虑是否真的需要所有这些都是可变属性。

使用属性优于公共字段有各种优点 ,但我认为主要的一个属性在逻辑上是类的API的一部分,而字段在逻辑上是一个实现细节。 该属性说明呼叫者可以做什么 – 一个字段说明如何存储值。

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

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

如果不添加get和set,则使用的是字段而不是属性。 在许多情况下,这不会产生很大的不同。 但是,您不能像使用Property一样将数据绑定到字段。 所以你会输掉它。

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

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

但是在这种情况下,它们可能不应该是public ,而是将它们设为internalprivate以便外部代码不应该使用它们。

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

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

public告诉消费者他们可以依赖该成员在场,作为一个财产让您更好地控制如何将其交付给他们。

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

第二个,编译器生成一个私有支持字段和一些样板级get / set方法。 然后,这些允许您访问属性,就像它们是字段一样,但具有仅适用于属性的优点。

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

属性有一些优点。 一个是可以将属性设置为只读,甚至只写,或者只读内部只写等。由于它们的行为与方法类似,因此可以在其中执行任意代码。 当您需要实现诸如INotifyPropertyChanged或者实际上是从其后面的几个字段计算属性时,这非常有用。

另一个优点是封装。 你不是直接将自己绑在class级的领域,而是与财产有关。 因此,如果关于字段的一些细节发生变化(比如它消失并变得有计算),通过使用该属性,您可以将自己与这些实现细节隔离开来。

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

不必 ,但这只是编码stundart,它的优点和缺点。 考虑此链接以获取更多资源:

财产代理人