C#3.0拡張メソッドは、基本Typeに拡張機能を追加し、そのTypeのすべてのインスタンスでそのメソッドを呼び出すことを有効にします。
今、私が知っているJavaScriptは、特定のインスタンスにメソッドを追加できるIDispatchExを実装しています。
では、C#クラスの「インスタンス」に一連のメソッドを追加するにはどうすればよいですか?私はこれが動的言語と静的言語の聖戦の領土であることを知っています。:)私の意図はそれではないことを明確にさせてください。
インターフェイスを実装するクラスに応じて、一連のイベントをインターフェイスに追加できるようにしたいだけです。
Genericsを使用してそれを行うことができました
inteface ISample<T> { T SupportedEvents; }
class Sample : ISample<UIWidgetEvent> { }
class Sample2 : ISample<NonVisualUIWidget> { }
class UIWidgetEvent { public EventHandler Clicked; }
class NonVisualUIWidget {public EventHandler Expired;}
class TestSample
{
public void Test()
{
new Sample().SupportedEvents.Clicked += ...
new Sample2().SupportedEvents.Expired += ...
}
}
それで私はSupportedEvents
言いたくなかった
new Sample().Clicked +=...
それから私はJavaScript(私C#
はそうではないことを知っていJS
ます:))... AND、、IDispatchEx
などなどを考えIL Weaving
、Reflection.Emit
これを行う方法があるかもしれないと思いました... [設計時のサポートは素晴らしいですが、私はなくても生きることができます]
はい、おそらくビジターパターンでこの「インスタンス拡張」を行うことができます。[糖衣構文を入手できるかどうかはわかりませんが]
コメント?