当使用ikvmc将JAR编译为DLL时,它会生成带有趣名称的方法和类,例如
TestClass.__<clinit>(object X);
或
TestClass$1.MethodName();
我希望从C#客户端调用和/或覆盖它们。如何在不使用Reflection的情况下实现这一目标?
更新:不仅要调用,还要在继承的类中覆盖......
答案 0 :(得分:2)
您必须至少使用反射来创建委托:
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
方法。