1

当使用 ikvmc 将 JAR 编译为 DLL 时,它会生成具有有趣名称的方法和类,例如

TestClass.__<clinit>(object X);

或者

TestClass$1.MethodName();

我希望从 C# 客户端调用和/或覆盖它们。我怎样才能在不使用反射的情况下实现这一点?

更新:不仅调用,而且在继承的类中也覆盖......

4

1 回答 1

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.DelegateCreateDelegate方法。

于 2011-07-28T11:33:19.760 回答