Вызов метода со специальными символами в имени из C # - PullRequest
1 голос
/ 28 июля 2011

При использовании ikvmc для компиляции JAR в DLL он генерирует методы и классы с забавными именами, например

TestClass.__<clinit>(object X);

или

TestClass$1.MethodName();

Я хочу вызвать и / или переопределить ихот клиента C #.Как я могу добиться этого без использования Reflection?

Обновление: не только вызов, но и переопределение в унаследованных классах ...

1 Ответ

2 голосов
/ 28 июля 2011

Вы должны использовать отражение как минимум для создания делегата:

var assembly = typeof(SomeJarToDllAssembly.SomeType).Assembly;
var type_TestClass1 = assembly.GetType("TestClass$1");
var method_clinit = type_TestClass.GetMethod("__<clinit>");
var dlgClinit = (Action<object>)Delegate.Create(type_TestClass, method_clinit);

// call delegate like normal method (it's fast as normal method calling)
dlgClinit(new object());

Есть несколько случаев, как правильно создавать делегатов. См. Справочное руководство по MSDN: System.Delegate и методы CreateDelegate.

...