我刚刚在一个旧的 Windows 窗体应用程序(由设计者创建)中发现了这一行:
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
它似乎在使用 ResourceManager.GetObject()为了得到图标。我的问题是关于 $
前缀 this
的重要性。文档中没有提及美元符号。
美元是否有特殊含义(可能是反射?)还是仅仅与 GetObject()
的实现有关?
此外,图标实际存储在哪里?
最佳答案
这是 .NET 中使用的一个非常标准的技巧,编译器在需要为自动生成的类或字段生成名称时也会使用它。使用像 $
这样的字符可确保永远不会与程序中的标识符发生名称冲突。
当您仅使用 C# 编程时,这种情况的可能性不大,this 是一个关键字。但肯定是用其他语言。例如,您可以创建一个 VB.NET Winforms 项目,在窗体上放置一个按钮并将其命名为“this”。本地化表单时,按钮的 Text 属性源显示为:
<data name="this.Text" xml:space="preserve">
<value>Button1</value>
</data>
如果没有将 $ 放在前面,那将与表单的 Text 属性资源发生名称冲突。直到您使用一种允许在标识符名称中使用 $ 的语言进行编程。标准 VS 语言都没有。
还有一个细节是,您将无法从 C# 代码中引用该按钮。这也有一个逃生舱口,您可以在代码中使用@this。 @ 前缀确保编译器不会将其识别为关键字,而只是一个普通标识符。
关于c# - resource.GetObject 中使用的美元 ($) 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018721/