在FirstName类中,没有(显式地)引用firstName私有变量,而FirstName类又应该隐藏这个变量。你能解释一下这是如何工作的吗?我假设有一些私有变量被获取和设置了。谢谢。
// auto-implemented property FirstName
public string FirstName { get; set; }
在FirstName类中,没有(显式地)引用firstName私有变量,而FirstName类又应该隐藏这个变量。你能解释一下这是如何工作的吗?我假设有一些私有变量被获取和设置了。谢谢。
// auto-implemented property FirstName
public string FirstName { get; set; }
基本上,编译器会将你的代码转换为类似于以下的内容:
private string <__>firstName;
public string FirstName
{
get { return <__>firstName; }
set { <__>firstName = value; }
}
这可能不是确切的名称,但在名称中使用尖括号很重要-因为它使它成为一个 无法发音名称。(这是非官方术语,但被广泛使用-我不知道Eric Lippert是否真正创造了它,或者他只是第一个在我读过的东西中使用了它。)它是一个不是有效的 C# 标识符的名称,但 CLR 却可以很好地处理它。这有两个好处:
它对所有其他生成的代码使用相同的技术-匿名类型、匿名函数、迭代块等。
是的,编译器会创建一个私有的、匿名的后备字段,只能通过属性的get和set访问器进行访问。(c) msdn
编辑:
当您定义一个属性时,编译器将发出两个方法:get_XXX
和 set_XXX
。当C#编译器看到试图获取或设置属性的代码时,实际上会发出对其中一个方法的调用。(c) "CLR via C#"