すべての .net 開発者は、プロパティの概念について知っています。大体 99.99% で、getter と setter という 2 つのメソッドをつなぎ合わせた単なるメタデータです。
add、remove、invoke メソッドを使用するイベントについても、通常は同じことが言えます。
ECMA-335 は、プロパティまたはイベントのいずれかに適用される «Other» 種類のメソッド セマンティックを記述します。概念的には、プロパティまたはイベントは複数の «other» メソッドを持つことができます。
«other» メソッドを持つプロパティを見つけたのは今日が初めてです。そしてもちろん、それは COM に関連している必要がありました。EnvDTE アセンブリ (Visual Studio へのアドインの書き込みに使用) のインターフェイス EnvDTE.Property には、次のように定義されたプロパティが含まれています。
.property object Value()
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 00 00 00 00 00 00 )
.get instance object EnvDTE.Property::get_Value()
.other instance void EnvDTE.Property::let_Value(object)
.set instance void EnvDTE.Property::set_Value(object)
}
let_Value は次のように定義されています。
.method public hidebysig newslot specialname abstract virtual
instance void let_Value([in] object marshal( struct) lppvReturn) runtime managed internalcall
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 00 00 00 00 00 00 )
}
どうやら、VBScript および VB.NET より前のバージョンの VB では、Let キーワードを使用してプロパティを定義できます。Let は Set と同じ署名を持っています。ここに関係があると感じます。
しかし、EnvDTE が記述された言語でこのプロパティがどのように宣言されているかを知っている人はいますか? 同じパターンでアセンブリを作成するにはどうすればよいですか (ilasm を使用しないと簡単すぎます)。そして、誰かが同様の財産に直面したことがありますか?
そして、おそらくこれとはセマンティックが異なる、他の «other» プロパティを見た人はいますか? はいの場合、彼らは何に慣れていますか?