C# 3.0 关于自动属性的问题

C# 3.0 关于自动属性的问题,c#-3.0,automatic-properties,C# 3.0,Automatic Properties,如果实现自动属性会发生什么 public string Foobar { get; set; } 然后对相应的变量进行编码 private string foobar = string.Empty; automatic属性将使用此变量还是编译器生成 另一个变量 否,自动属性将不使用您的变量。它将与任何其他名为foobar的字段一样 名称smilarity不会以任何方式影响编译器 编译器将在后台生成一个字段,但您不能以任何方式访问automatic属性的backing字段 显示了在IL(中间语

如果实现自动属性会发生什么

public string Foobar { get; set; }
然后对相应的变量进行编码

private string foobar = string.Empty;
automatic属性将使用此变量还是编译器生成
另一个变量

否,自动属性将不使用您的变量。它将与任何其他名为foobar的字段一样

名称smilarity不会以任何方式影响编译器

编译器将在后台生成一个字段,但您不能以任何方式访问automatic属性的backing字段


显示了在IL(中间语言,C#的组装)级别上如何工作。

为什么会这样?支持字段不必(通常也不必)以这种方式命名。

编译器不会使用该变量,不。要使用您的变量,您必须编写

private string foobar = string.Empty;

public string Foobar 
{
    get { return foobar; }
    set { foobar = value; }
}

如果您有Resharper,您可以设置模板来执行此操作。Resharper还将从未使用的私有变量为您生成getter。

我的意思是,当您不使用自动属性时。所以你不应该总是把名字“Foobar”和“Foobar”链接成你头脑中的“属性对应的支持字段”。