从 C# 调用名称中包含特殊字符的方法

发布于 2024-11-26 21:56:22 字数 260 浏览 1 评论 0原文

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

TestClass.__<clinit>(object X);

TestClass$1.MethodName();

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

更新:不仅调用,而且还在继承的类中重写......

When using ikvmc to compile JAR to DLL, it generates methods and classes with funny names, like

TestClass.__<clinit>(object X);

or

TestClass$1.MethodName();

I wish to call and/or override them from the C# client. How can I achieve this without using Reflection?

Update: Not only call, but override in inherited classes too...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痞味浪人 2024-12-03 21:56:22

您至少必须使用反射来创建委托:

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

You must use reflection at least for creation of delegate:

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());

There are several cases how correctly create delegates. See the MSDN reference guide: System.Delegate and the CreateDelegate methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文