为什么没有调用IExpando.AddMethod?

时间:2009-03-15 10:24:33

标签: c# internet-explorer interop

我在Internet Explorer中托管我的WinForms控件。另外,当javascript代码尝试访问它们时,我已经实现了IExpando接口,以便能够在我的C#代码中模拟未显示的字段和方法。例如

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

请注意,我的C#类不包含Foo字段和Bar方法。将使用参数name =“Foo”调用IExpando.AddField,但不会执行IExpando.AddMethod。 如果是myobj.Bar(“BarText”);只会执行IReflect.GetMethods,IReflect.GetProperties和IReflect.GetFields方法。

有谁知道为什么没有调用IExpando.AddMethod?

谢谢, 保罗。

1 个答案:

答案 0 :(得分:0)

我认为从js开始,AddMethod永远不会被调用。因为“方法”实际上只是以委托作为其值的属性。调用这样的函数实际上是获取一个属性然后调用它。

在这种情况下,您将获得一个成员缺少异常,与js对象相同。您可以尝试先设置它:

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

那会有用!否则我认为您需要提前了解它并将其返回GetProperties。