【发布时间】:2011-07-19 08:12:54
【问题描述】:
我想知道,.Net 标识符中接受哪些字符?
不是 C# 或 VB.Net,而是 CLR。
我问这个的原因是我在查看 yield return 语句是如何实现的 (C# In Depth),并看到它编译成如下代码:
public int <count>5__1;
还有其他我可以使用的标识符字符吗?此代码不会公开。
【问题讨论】:
标签: .net clr identifier
我想知道,.Net 标识符中接受哪些字符?
不是 C# 或 VB.Net,而是 CLR。
我问这个的原因是我在查看 yield return 语句是如何实现的 (C# In Depth),并看到它编译成如下代码:
public int <count>5__1;
还有其他我可以使用的标识符字符吗?此代码不会公开。
【问题讨论】:
标签: .net clr identifier
这受 CLS 规范第 8.5.1 章“有效名称”的约束:
CLS 规则 4:组件应遵循技术报告 15 的附件 7 Unicode 标准 3.0 管理允许的字符集 开始并包含在标识符中,可在线获取 http://www.unicode.org/unicode/reports/tr15/tr15-18.html。身份标识 应采用 Unicode 规范化形式定义的规范格式 C. 对于 CLS 而言,如果两个标识符的小写字母相同,则它们是相同的 映射(由 Unicode 语言环境不敏感、一对一指定) 小写映射)是相同的。也就是说,对于两个标识符 在 CLS 下被认为不同,它们的差异应超过 只是他们的情况。但是,为了覆盖继承的 定义 CLI 需要对原始文件进行精确编码 使用声明。
或者换句话说,它没有指定 verboten 字符列表,它只关心能够比较字符串而不会感到意外。这是 CLR 必须做的所有事情。编译器的工作要困难得多,它必须能够识别程序中的标记,这是词法分析器的工作。实用的词法分析器实现为标识符中的有效字符设置规则。例如,不是以数字开头的标识符。
【讨论】:
C# 规范说明了可以使用哪些字符。
然而,CLR 允许更多。这就是 C# 编译器发出它们的原因。
【讨论】:
'!2ss<,' 在 IL 中有效。