13

IsSpecialName在哪些输入下返回 true?根据我的简短研究,我发现属性访问器和运算符重载具有特殊名称,以及名称中包含下划线的任何类型。谁能给我一个类型名称特殊情况的完整描述?

4

2 回答 2

11

ECMA-335 中发布的 CLI 规范是此类信息的不错来源。在文档中搜索rtspecialname(CLR 专用的名称) 和specialname(工具专用的名称。为 rtspecialnames 打开 specialname 属性。给出这些命中:

  • value__枚举类型的基础字段
  • 属性的 getter 和 setter 访问器方法
  • 事件的添加、删除和触发访问器方法
  • 运算符重载
  • 类的.ctor方法,构造函数
  • 类的.cctor方法,静态构造函数
于 2013-11-05T12:28:59.200 回答
1

首先 IsSpecialName 不接受任何输入。此外,Type 的属性并不真正适用于属性访问器或运算符重载,因为它是Type的属性,并且运算符/访问器不是类型。尽管 MSDN 文章可能会告诉您,但还是会这样。

我冒昧猜测,当对应的TypeAttribute为时,它会返回 true SpecialName。您可以参考 ECMA 335 标准以找出应该标记为特殊名称的内容。顺便说一句,您将了解到它是运算符和属性访问器之类的东西。这解释了 MSDN 文章中的混淆可能来自哪里。

我相信Type这个属性主要是为了编译器的利益而实现的,因此可能需要额外的(与 ECMA 335 要求相比)特殊名称处理。(这可能因编译器而异)。

于 2013-11-05T12:24:42.280 回答