SpecialNameAttribute允许哪些其他巧妙的技巧?

时间:2012-11-06 22:50:09

标签: c# vb.net compiler-construction attributes

在研究实现Visual Basic Power(^)运算符的a question时,我了解到System.Runtime.CompilerServices.SpecialNameAttribute类允许在C#中实现此运算符以便在VB中使用。

有趣的是,documentation州:

  

SpecialNameAttribute 类当前未在.NET Framework中使用,但保留供将来使用。

我的问题是:使用此属性时还有哪些其他巧妙的技巧?

(附带问题 - 文档不准确或者这是一个语义问题,因为该属性显然是由编译器使用而不是框架?)

1 个答案:

答案 0 :(得分:10)

正如您从该代码查看生成的IL时所知,编译器使用该属性打开方法声明中的 specialname IL属性。寻找其用途的最佳位置是ECMA 335 CLI规范。

通常,它用于将标识符标记为具有特殊用途。例如,你会看到它在属性的getter和setter方法,事件访问器方法和操作符重载上启用。请注意与 rtspecialname IL属性的区别,specialname属性会影响工具,而不会影响抖动。就像本例中的VB.NET编译器一样,它现在将op_Exponent()区分为运算符重载,而不仅仅是一个带有趣名称的普通方法。

请注意,这是所有烘焙行为,您无法通过编程和抖动编程来识别这些技巧。