2009-03-15 2 views
2

Я принимаю мой контроль над WinForms в Internet Explorer. Кроме того, я реализовал интерфейс IExpando, чтобы иметь возможность эмулировать неиспользуемые поля и методы в моем коде C#, когда код javascript пытается получить к ним доступ. Например,Почему IExpando.AddMethod не вызывался?

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

Обратите внимание, что мой класс C# не содержит поле Foo и метод Bar. IExpando.AddField будет вызываться с именем параметра = «Foo», но IExpando.AddMethod не будет выполнен. В случае myobj.Bar ("BarText"); будут выполнены только методы IReflect.GetMethods, IReflect.GetProperties и IReflect.GetFields.

Кто-нибудь знает, почему IExpando.AddMethod не был вызван?

Thanks, 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.

Смежные вопросы