Я пытаюсь настроить код C# для автоматического создания фиктивных или резервных делегатов для методов, которые вызываются скриптом IronPython и которые явно не реализованы.Динамически создавать резервный делегат во время выполнения
Скажем, есть сценарий, который вызывает нестатический метод класса C# «MoveTo», который еще не реализован в соответствующем классе. Обычно, если он существует, он добавляется в область действия скрипта, создавая соответствующий экземпляр делегата, который присваивается области вызовом «SetVariable» с именем метода и экземпляра делегата. Это отлично подходит для тех методов, которые уже реализованы.
В случае метод еще не реализован вызов не кончится, но вместо того, чтобы быть перенаправлен на фиктивный метод, который изящно обрабатывает вызов и претендующей успешного выполнения (которое следует рассматривать некритический в моем конкретном случае).
Проблема: методы, вызываемые скриптом IronPython, имеют широкий диапазон подписей (на самом деле они могут иметь любую возможную подпись). Поэтому я хотел бы динамически создать резервный делегат, который получает одну и ту же подпись вызываемого метода и, следовательно, «ловит» каждый вызов еще не реализованных методов.
Ребята, вы знаете, как я могу достичь этой цели?
Не могли бы вы уточнить свои вопросы и добавить образцы? Вы говорите, что вы называете «нестатические методы класса C#», добавляя их через имя/делегат через SetVariable. Означает ли это, что в вашем скрипте python они выглядят как глобальные/статические/не-членные функции вместо вызова участника на экземплярах объектов CLR (при этом все еще неявно связаны с объектом CLR без объекта)? Ни один из методов ничего не возвращает? –
Итак, в основном вы хотите создать метод со специальной сигнатурой во время выполнения? Вы смотрели на SO для динамического создания лямбда-выражений? – JJ15k
@SimonOpelt: это правильно. В IronPython они выглядят как глобальные функции. Объект, к которому они принадлежат, - это одноэлементный, во всем приложении есть только один экземпляр этого класса. Объект представляет собой часть оборудования, а робот должен быть более точным. IronPython используется для написания поведения робота. Обнаруженные методы контролируют различные способности робота, такие как вождение, поворот, перемещение рук, подобные вещи. –