Почему IExpando.AddMethod не был вызван? - PullRequest
2 голосов
/ 15 марта 2009

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

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 не вызывался?

Спасибо, Пол.

1 Ответ

0 голосов
/ 16 августа 2011

Я думаю, из js AddMethod никогда не будет вызываться. Поскольку "методы" на самом деле просто свойства с делегатами в качестве их значения. Вызов такой функции фактически приводит к получению свойства, а затем к его вызову.

В этом случае вы получите исключение члена, как и в случае с объектом js. Вы можете попробовать установить его сначала:

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

Это будет работать! В противном случае, я думаю, вам нужно знать об этом заранее и вернуть его в GetProperties.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...