2009-03-15 6 views
2

私はInternet ExplorerでWinFormsコントロールをホストしています。さらに、IExpandoインターフェイスを実装して、JavaScriptコードがそれらにアクセスしようとするときに、C#コード内に存在しないフィールドやメソッドをエミュレートできるようにしました。たとえば、なぜIExpando.AddMethodが呼び出されなかったのですか?

var myobj = new ActiveXObject('server.object'); 
myobj.Foo = "FooText"; 
myobj.Bar("BarText"); 

私のC#クラスにはFooフィールドとBarメソッドが含まれていないことに注意してください。 IExpando.AddFieldはパラメータname = "Foo"で呼び出されますが、IExpando.AddMethodは実行されません。 myobj.Bar( "BarText")の場合。 IReflect.GetMethods、IReflect.GetPropertiesおよびIReflect.GetFieldsメソッドのみが実行されます。

IExpando.AddMethodが呼び出されなかった理由を知っている人はいますか?

ありがとう、 Paul。

答えて

0

私はjsから、AddMethodは決して呼び出されないと思います。 「メソッド」は実際にはデリゲートを値とする単なるプロパティです。そのような関数を呼び出すと、実際にプロパティを取得して呼び出します。

この場合、jsオブジェクトと同じように、メンバーが不足している例外が発生します。あなたはそれを最初に設定しようとすることができます:

var myobj = new ActiveXObject('server.object'); 
myobj.Foo = 'FooText'; 
myobj.Bar = function(b) { console.log(b); }; 
myobj.Bar('BarText'); 

それは動作します!それ以外の場合は、事前にそれについて知り、GetPropertiesで返す必要があると思います。

関連する問題