如果你实现一个自动属性会发生什么
public string Foobar { get; set; }
然后编码对应的变量
private string foobar = string.Empty;
自动属性会使用这个变量还是编译器会生成一个额外的变量?
如果你实现一个自动属性会发生什么
public string Foobar { get; set; }
然后编码对应的变量
private string foobar = string.Empty;
自动属性会使用这个变量还是编译器会生成一个额外的变量?
不,自动属性不会使用您的变量。它就像任何其他称为 foobar 的字段一样。
名称相似性不会以任何方式影响编译器。
编译器将在幕后生成一个字段,但您无权以任何方式访问自动属性的支持字段。
这篇文章展示了在 IL(中级语言,C# 汇编)级别的工作方式。
编译器不会使用该变量,不。要使用您的变量,您必须编写
private string foobar = string.Empty;
public string Foobar
{
get { return foobar; }
set { foobar = value; }
}
如果您有 Resharper,您可以设置模板来执行此操作。Resharper 还将为您从未使用的私有变量中生成一个 getter。
为什么会呢?支持字段不必(并且通常不会)以这种方式命名。