C#学习教程:自动实现的属性中的私有变量在哪里/什么?分享


自动实现的属性中的私有变量在哪里/什么?

没有(显式)引用firstName应该隐藏的firstName私有变量。 你能解释一下这是怎么回事吗? 我假设有一些私有变量被getted和setted。 谢谢。

// 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非常满意。 这有两个好处:

它对所有其他生成的代码使用相同的技术 – 匿名类型,匿名函数,迭代器块等。

是的, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors. (c) msdn

编辑:
定义属性时,编译器将发出2个方法: get_XXXset_XXX 。 当C#编译器看到试图获取或设置属性的代码时,编译器实际上会发出对这些方法之一的调用。 (c)“通过C#CLR”

C#编译器在幕后创建后备存储字段,您可以尝试对其进行反编译。 使用Reflector。 你会知道它是如何创造支持领域的。 这是同样的答复

MSDN自动实现的属性

自动实施的财产

其他人已经回答了这个问题,但是进一步的信息……你可以在运行时使用reflection找到支持字段。 查找命名为<< PropertyName >> k__BackingField的字段。

另一篇可能有帮助的post:

上述就是C#学习教程:自动实现的属性中的私有变量在哪里/什么?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1269709.html

(0)
上一篇 1天前
下一篇 1天前

精彩推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注