c# - resource.GetObject 中使用的美元 ($) 字符

标签 c# .net winforms string icons

我刚刚在一个旧的 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/

相关文章:

.net - 更改表单不透明度而不更改容器控件的不透明度

c# - 隐藏应用程序中的 Form.ShowDialog

c# - 更改Winforms菜单下拉列表的边框颜色

.net - activeX (COM) 控件在被父级关闭时进行清理的正确方法是什么?

c# - EnterWriteLock之后,不保留锁定

c# - 调试调用 .Net(C#) dll 的 VB6 项目

winforms - TreeView 填充/绑定(bind)

c# - WIQL : How to get the content of a field of a work item returned by a query

c# - 使用 .NET C# 从 Azure 云服务读取配置设置

c# - 让 asp.net 在 session 中存储 View 状态而不是增加 html