C# 为什么要使用成员变量?

C# 为什么要使用成员变量?,c#,variables,properties,logic,il,C#,Variables,Properties,Logic,Il,可能重复: 几周前,我用C#开始了一份新的工作(这是我从那里开始学习的东西),我看到了一些做事的方法,我很好奇为什么(因为我学习得很新鲜,他们多年来都学过东西。) 基本上,我想找出原因: private int i; 优于: private int I {get;set;} 如果答案是(正如我所怀疑的)为调用get/set生成了额外的IL,那么为什么会存在自动实现的get/set呢?为什么 public int i; 比: public int I{get;set;} 更奇怪的是,为什

可能重复:

几周前,我用C#开始了一份新的工作(这是我从那里开始学习的东西),我看到了一些做事的方法,我很好奇为什么(因为我学习得很新鲜,他们多年来都学过东西。)

基本上,我想找出原因:

private int i;
优于:

private int I {get;set;}
如果答案是(正如我所怀疑的)为调用get/set生成了额外的IL,那么为什么会存在自动实现的get/set呢?为什么

public int i;
比:

public int I{get;set;}
更奇怪的是,为什么我不总是使用属性,或者为什么我不避免像瘟疫这样的自动实现方法,一个或另一个

我知道,当我想到这个问题时,听起来像是一个合乎逻辑的问题,但在我写这篇文章时,就不那么符合逻辑了,所以我希望它能有某种意义


谢谢

很多时候,除了自动实现的属性定义之外,您还需要额外的逻辑

例如,如果您想要实现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...
        }
    }
}

这里有一些很好的阅读:通常,您将始终使用属性。我想这就是你问题的答案,或者至少是你应该寻找的答案。至于它们为什么存在,请考虑这些属性是在带有私有字段的引擎罩下实现的,因此必须支持私有字段才能使其工作。因此,删除此功能没有多大意义。此外,C#直到后来才发明了自动属性(问题中显示的速记语法),因此不久前,程序员不得不手工写出所有支持字段因为属性是您希望外部世界看到您的类的方式。私有财产基本上是无用的。您希望使用公共属性而不是公共字段的原因主要是样式,不仅对您而言,对任何使用反射的程序来说也是如此。这一点已经得到了回答[Here][1][1]: