9

Visual Basic の Power ( ) 演算子の実装に関する質問を調査しているときに、VB で使用するために C# でこの演算子を実装できるクラスがあること^を知りました。System.Runtime.CompilerServices.SpecialNameAttribute

興味深いことに、ドキュメントには次のように記載されています。

SpecialNameAttributeクラスは、現在 .NET Framework では使用されていませんが、将来の使用のために予約されています

私の質問は次のとおりです。この属性を使用する場合、他にどのような巧妙なトリックを利用できますか?

(副次的な質問 - ドキュメントが不正確ですか、それとも属性がフレームワークではなくコンパイラによって使用されているように見えるため、これはセマンティックの問題ですか?)

4

1 に答える 1

12

そのコードから生成された IL を見るとわかるように、コンパイラはこの属性を使用して、メソッド宣言のspecialname IL 属性をオンにします。その使用法を探すのに最適な場所は、ECMA 335 CLI 仕様です。

一般に、識別子に特別な用途があることを示すために使用されます。たとえば、プロパティの getter メソッドと setter メソッド、イベント アクセサー メソッド、および演算子のオーバーロードでオンになることがわかります。rtspecialname IL 属性との違いに注意してください。specialname 属性はツールに影響し、ジッターには影響しません。この場合の VB.NET コンパイラのように、op_Exponent() を面白い名前の単純なメソッドではなく、演算子のオーバーロードとして区別します。

これはすべて組み込みの動作であることに注意してください。コンパイラとジッターが認識するようにプログラムされていないトリックを引き出すことはできません。

于 2012-11-07T15:42:18.737 に答える