什么是全球方法?

时间:2010-09-26 05:29:01

标签: .net

.net中的全局方法是什么?我在谈论ModuleBuilder.DefineGlobalMethod方法创建的那些。

可以从C#或其他.net语言调用这些方法吗?

2 个答案:

答案 0 :(得分:3)

很难用熟悉的术语来谈论这个问题,这种功能完全没有在C#或VB.NET语言中公开。但是,C ++ / CLI编译器使用它。它在Ildasm.exe或Reflector等反汇编程序中显示的方式也没有标准化。

也许最好的角度是Reflector,看看System.Data.dll程序集。它位于未命名的命名空间(Reflector中的“ - ”),<Module>节点。 .cctor你看到有一个模块initiailizer。与静态类构造函数相同的动物,但在模块级别。它在程序集加载时运行。 C ++ / CLI使用它来初始化C运行时库。

你找到的___ CxxCallUnwindDtor()方法有一个“全局方法”的例子。 C ++ / CLI语言没有任何方法可以公开这些函数,它们总是嵌入到具有内部可访问性的元数据中。因此不能直接从C#或VB.NET程序调用。我没有玩过ModuleBuilder,知道是否可以在C ++ / CLI之外完全搞砸了。这都是非常模糊,实际上并没有那么有用。

答案 1 :(得分:0)

全局方法意味着可以在不完全限定其名称的情况下调用该方法,即

方法(Param)而不是Module.Method(Param)。

在vb中,模块内的公共方法是全局的。

在c#中,静态类中的公共静态方法是全局的。