C#中的属性或变量

可能重复:
属性与字段:需要帮助掌握属性对字段的使用。

我在课堂上看过属性和变量。

你能告诉我们我们使用哪种情况属性以及我们使用变量的场景。

通常,无论如何,属性都由变量支持 。 即使你有一个自动实现的属性,如下所示:

public string Name { get; set; } 

幕后仍有变数。 并非所有属性都由变量支持(例如DateTime.Now ),但绝大多数属性都是。

实际上,您应该始终使用属性来访问其他类型的数据,而不是公开变量。 (换句话说,变量本身应该是私有的。)这样你就可以将类的API与其实现分开……确切地说,类存储数据的方式应该只涉及类本身。

如果您引用类本身中的一段数据,则根本不需要属性,除非您想要在更改它时执行validation,或者类似的事情。

在通过属性公开变量之前,值得仔细思考 – 如果你只是一直这样做,你会失去一定数量的封装; 类型通常不应该只是由其他代码操纵的数据集合。 他们应该使用其中的数据来公开更高级别的操作。 这有点难以描述,我并不是说这些属性本身就不好 – 只是如果你不小心它们就会被过度使用。

通常,最好创建公共属性和私有变量。

公共变量的原因很少。

[需要属性的示例是设置对象属性并且还引发事件以通知订阅者更改]。

可能有很多场景使用变量和属性之间存在差异。 通常变量用于类的内部工作,而类不应该公开变量,换句话说,属性是从其他类访问的。

此外,一些代码生成和工具要求您定义变量或属性。 例如,在XAML(WPF和Silverlight)中,您必须公开依赖项属性的变量。

此外,由于属性是用于获取或设置值的代码,因此它们甚至可用于提供对存储在其他地方的内容的访问,而不是内部类变量。 例如,您可以定义一个允许将UI片段绑定到文本文件内容的属性。

你不必“使用”字段而不是“属性”,字段实际上在运行时更快。

但是,通常您需要在类上将实例变量定义为Properties。 这使您可以使用Fields做一些额外的事情。

  1. 可以是只读或只写
  2. 可以像方法一样包含在接口中
  3. 可能有副作用。

您的类的接口可以使许多事情变得更容易,包括测试和维护。

 public interface IStudentGroup { List NameList { get; } } 

副作用是最有用的function之一。 假设您有一个名为Items的属性,其中包含一个集合。 如果它为null,您可能希望自动初始化它。 例如:

 private List namesList; public List NameList { { get { if ( namesList == null ) namesList = new List(); return namesList; } } 

为了完整性我想添加(来自msdn )

属性不应该是计算复杂或产生副作用

因此,对于计算复杂的操作或具有副作用的情况,编写GetX(), SetX()方法而不是使用属性

属性getter应该是简单的操作,没有任何先决条件。 如果getter可能抛出exception,请考虑将该属性重新设计为方法。 此建议不适用于索引器。 由于参数无效,索引器可能会抛出exception。