哪种C#类型名称特别?

时间:2013-11-05 11:32:34

标签: c#

IsSpecialName在什么输入下返回true?根据我的简短研究,我发现属性访问器和运算符重载具有特殊名称,以及名称包含下划线的任何类型。任何人都可以给我一个类型名称特殊的案例的完整描述吗?

2 个答案:

答案 0 :(得分:11)

ECMA-335中发布的CLI规范是这样的信息的合适来源。在文档中搜索rtspecialname(CLR特有的名称)和specialname(工具特有的名称。特殊名称属性为rtspecialnames打开。给出这些命中:

  • 枚举类型的基础value__字段
  • 属性的getter和setter访问器方法
  • 事件的添加,删除和触发器访问方法
  • 运算符重载
  • 类的.ctor方法,构造函数
  • 类的.cctor方法,静态构造函数

答案 1 :(得分:1)

首先,IsSpecialName不接受任何输入。 Type的属性也不适用于属性访问器或运算符重载,因为它是 Type 的属性,而运算符/访问器不是类型。尽管MSDN文章可能会告诉您这一点。

我猜想当通讯员TypeAttributeSpecialName时,它会返回true。您可以参考ECMA 335标准,找出应该标记为特殊名称的内容。顺便说一下,你会发现它是运营商和财产访问者之类的东西。这解释了MSDN文章中的混淆可能来自何处。

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