【问题标题】:Why use member variables at all? [duplicate]为什么要使用成员变量? [复制]
【发布时间】:2012-02-17 21:44:49
【问题描述】:

可能重复:
Difference between Property and Field in C#

几周前我开始使用 C# 开始了一份新工作(从那里开始我基本上就开始学习了),我已经看到了几种做事方式,我很好奇为什么(看到我很新鲜,这些年来他们都捡到了东西。)

基本上,我试图找出原因:

private int i;

优于:

private int I {get;set;}

如果答案是(我怀疑)为调用 get/sets 生成了额外的 IL,那么为什么会存在自动实现的 get/sets?为什么是

public int i;

差于:

public int I{get;set;}

更好奇为什么我不总是使用属性,或者为什么我不避免像瘟疫这样的自动实现方法,一种或另一种。

当我想到这个问题时,我知道这听起来像是一个合乎逻辑的问题,但在我写它的时候却不是这样,所以我希望它有某种意义。

谢谢

【问题讨论】:

  • 一般来说,您总是使用属性。我认为这就是您问题的答案,或者至少是您应该寻求的答案。至于它们为什么存在,请考虑属性是在底层实现的,具有私有字段,因此必须支持私有字段必须才能使属性正常工作。因此,删除此功能没有多大意义。此外,直到后来才为 C# 发明了自动属性(您在问题中显示的简写语法),因此不久前,程序员不得不手动写出所有支持字段。
  • 你使用属性的原因,(你的int I {get; set;})是因为属性是你希望外界看到你的类的方式。私有财产本质上是无用的。您想使用公共属性而不是公共字段的原因主要是样式,不仅适用于您,也适用于任何使用反射的程序。
  • 这已经回答[这里][1] [1]:stackoverflow.com/questions/3035790/…

标签: c# variables properties logic il


【解决方案1】:

很多时候,您需要超出自动实现属性定义的额外逻辑。

例如,如果您想实现 INotifyPropertyChanged,在这种情况下,您将需要自己的支持字段,因此您可以编写:

private int someValue;
public int SomeValue
{
    get { return this.someValue; }
    set
    {
        if (value != this.someValue)
        {
            this.someValue = value;
            this.RaisePropertyChanged("SomeValue"); // This extra logic required...
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2019-08-30
    • 2010-09-08
    • 1970-01-01
    • 2014-08-16
    • 2010-12-24
    相关资源
    最近更新 更多