【问题标题】:Why do we use fields & properties instead of just a variable? [duplicate]为什么我们使用字段和属性而不仅仅是一个变量? [复制]
【发布时间】:2012-11-23 16:47:39
【问题描述】:

可能重复:
What is the difference between a field and a property in C#?
Difference between Property and Field in C# .NET 3.5+

我已经看到在 c# 中以下模式很常见:

   private string m_name = string.Empty;

public string Name
{
    get
    {
        return m_name;
    }
    set
    {
        m_name = value;
    }
}

当我们可以使用一个简单的变量时,为什么我们要使用一个字段和一个属性来保存一个值? 为什么我应该使用字段和属性而不是简单的变量?

【问题讨论】:

  • 查看上述问题的广泛答案
  • 这取决于您要预处理的值。想象一下,如果您(出于某种原因)想要确保保存为 Name 的任何字符串至少包含 1 个“e”,您可以在 setter 中而不是在主代码体中执行所有逻辑。

标签: c# properties field


【解决方案1】:

仅出于封装原则。为了阻止具体的实现,另外,您有机会(在这种情况下)在get/set 中添加额外的代码。

如果你不需要额外的代码,你可以直接使用

public string Name{get;set;}

或使用文件,如你所愿。但使用属性是 Microsoft 提供的指南

所以基本上所有的,都遵循它。

【讨论】:

    【解决方案2】:

    这有很多原因,但马上就会想到 2 个:

    首先,属性可以轻松绑定到 控件或其他读取所有属性(而不是字段)的基于反射的控件。

    其次,您可能希望在 getter 或 setter 中执行某些操作(例如触发 NotifyPropertyChanged 事件)。

    【讨论】:

      【解决方案3】:

      属性提供了通过属性读取和写入来保护类中的字段的机会。在其他语言中,这通常是通过实现专门的 getter 和 setter 方法的程序来完成的。 C# 属性启用了这种类型的保护,同时还允许您像访问字段一样访问该属性。

      属性相对于字段的另一个好处是您可以随着时间的推移更改它们的内部实现。对于公共字段,基础数据类型必须始终相同,因为调用代码取决于该字段是否相同。但是,通过属性,您可以更改实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 2021-07-04
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多