什么是 .net 中的全局方法?我指的是由 ModuleBuilder.DefineGlobalMethod
方法创建的方法。
这些方法能够从 C# 或其他 .net 语言中调用吗?
什么是 .net 中的全局方法?我指的是由 ModuleBuilder.DefineGlobalMethod
方法创建的方法。
这些方法能够从 C# 或其他 .net 语言中调用吗?
很难用通俗易懂的语言来谈论这个能力,因为C#或VB.NET语言根本没有暴露这个能力。但是C++/CLI编译器使用了它。像Ildasm.exe或Reflector这样的反汇编器显示方式也不是标准化的。
也许最好的方法是使用Reflector,查看System.Data.dll程序集。它位于未命名命名空间(Reflector中的“-”),<Module>节点中。你在那里看到的.cctor是一个模块初始化器。与静态类构造函数相同,但在模块级别上。它在程序集加载时运行。C++/CLI使用它来初始化C运行时库。
你在那里找到的___CxxCallUnwindDtor()方法是全局方法的一个示例。C++/CLI语言没有提供任何方法使这些类型的函数公共,它们始终以内部可访问性嵌入元数据。因此无法直接从C#或VB.NET程序调用它们。我还没有玩过ModuleBuilder,不知道是否可以混淆它,超出C++/CLI的范围。这都非常晦涩,实际上并不太有用。
全局方法指的是可以直接调用方法而不需要完全限定其名称,例如
Method(Param) 而不是 Module.Method(Param)。
在 VB 中,模块内的公共方法是全局的。
在 C# 中,静态类中的公共静态方法是全局的。
DefineGlobalMethod
就是这么做的吗?因为这些方法仍然属于 VB 模块,并且 DefineGlobalMethod
直接在 DLL 上。 - configurator