Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 什么';什么是全局方法?_.net - Fatal编程技术网

.net 什么';什么是全局方法?

.net 什么';什么是全局方法?,.net,.net,net中的全局方法是什么?我说的是用这个方法创建的 这些方法可以从C#或其他.net语言调用吗?全局方法意味着可以在不完全限定其名称的情况下调用该方法 方法(Param)而不是Module.Method(Param) 在vb中,模块内的公共方法是全局的 在c#中,静态类中的公共静态方法是全局的。很难用熟悉的术语谈论这一点,这种功能在c#或VB.NET语言中根本没有公开。但是,C++/CLI编译器使用它。它在诸如Ildasm.exe或Reflector之类的反汇编程序中的显示方式也没有标准化 也许

net中的全局方法是什么?我说的是用这个方法创建的


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

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

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

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


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

很难用熟悉的术语谈论这一点,这种功能在c#或VB.NET语言中根本没有公开。但是,C++/CLI编译器使用它。它在诸如Ildasm.exe或Reflector之类的反汇编程序中的显示方式也没有标准化

也许最佳角度是反射器,请查看System.Data.dll程序集。它位于反射器中的未命名命名空间(“-”)
节点中。您看到的.cctor有一个模块初始值设定项。与静态类构造函数相同,但在模块级别。它在加载程序集时运行。C++/CLI使用它初始化C运行时库


您在这里找到的uuuuu cxcalunwinddtor()方法是“全局方法”的一个示例。C++/CLI语言没有提供任何方式使这些函数公开,它们总是嵌入到具有内部可访问性的元数据中。因此不能直接从C#或VB.NET程序调用。我对ModuleBuilder的使用还不够深入,不知道除了C++/CLI之外,它是否会受到影响。这一切都非常模糊,实际上也没有那么有用。

首先,在C#(我也认为是VB)中,如果不使用类名限定公共静态方法,就不能从其他类调用它们。第二,也是更重要的一点,DefineGlobalMethod是在模块生成器(不是一个静态类的VB模块)上调用的,而不是在类生成器上调用的-因此该方法不会在类中。在VB中,您完全可以在不限定类名的情况下调用模块方法。我原以为C#中就是这样,但显然C#中的静态类与VB中的模块处理方式不同。我站在VB前面纠正了错误。您确定这就是
DefineGlobalMethod
所做的吗?因为这些方法仍然属于VB模块,而且
DefineGlobalMethod
直接位于DLL上。查看System.Data让我大开眼界。有一些方法被定义为public,但我无法从C#访问它们。