【问题标题】:Honestly, what's the difference between public variable and public property accessor? [duplicate]老实说,公共变量和公共属性访问器有什么区别? [复制]
【发布时间】:2011-09-26 10:27:06
【问题描述】:

可能的重复:
What is the difference between a field and a property in C#
Should I use public properties and private fields or public fields for data?

有什么区别:

public string varA;

public string varA { get; set; }

【问题讨论】:

标签: c# properties field


【解决方案1】:

公共属性访问器在未来为您提供更大的灵活性。

如果您想为设置值添加验证,您只需编写一个非默认设置器。您的其他代码都不需要修改。

您可能还想用代码替换默认的 getter。使用公共变量可能会很痛苦。

【讨论】:

  • 谁编写了取决于可见名称是变量还是属性的代码?这是我认为这很重要的唯一原因,否则您可以更改它并重新编译。
  • @moz:如果您的公共变量在单独的二进制文件中怎么办?您的应用程序将使用该变量。当您将其更改为属性时,该变量会消失,您现在有两个生成的函数。您必须重新编译每个引用它的二进制文件。
  • @Rob:所以财产利益主要适用于仅作为二进制文件提供的库?对于内部代码,没有那么多?
【解决方案2】:

除了其他答案之外,您还可以使用属性将值设置为只读甚至只设置:

public int Item { get; private set; } // read-only outside the class. Can only be set privately.

我也遇到过一些情况,我后来决定要代理一个对象,或者添加 AOP,这基本上需要属性。

【讨论】:

    【解决方案3】:

    公共属性通过公开的 getter 和 setter 方法访问字段和内部类代码。公共字段直接访问该字段。

    使用属性提供了提供抽象层和设计层的潜力(使集合访问器受保护、私有的能力)。

    当指定了一个属性并且没有实体存在时,编译器会创建一个底层私有字段,用于存储该值。本质上:

    private int item = 0;
    public int Item {
    get { return item; }
    set {item = value; }
    }
    

    一般来说,我倾向于将属性用于公开的公开变量,将字段用于私有。如果该字段被多次访问并且速度是关键的设计要求,我可能会考虑使用该字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多