使用C#中的特殊字符调用方法

时间:2011-07-28 11:27:08

标签: c# clr ikvm

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

TestClass.__<clinit>(object X);

TestClass$1.MethodName();

我希望从C#客户端调用和/或覆盖它们。如何在不使用Reflection的情况下实现这一目标?

更新:不仅要调用,还要在继承的类中覆盖......

1 个答案:

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