如何在C#中存在全局函数?

Naw*_*waz 19 c# global function

当在类中定义所有内容时,如何在C#中存在全局函数?我正在MSDN 阅读OpCodes.Call的文档,并惊讶地看到以下措辞,

元数据令牌携带足够的信息以确定调用是静态方法,实例方法,虚拟方法还是全局函数.

全球功能?它存在于C#中吗?(它绝对不是指static方法,因为它与全局函数一起明确列出).

i_a*_*orf 15

你不能在C#中拥有全局函数,它只是语言的一部分.您必须在您选择的某些类上使用静态方法来获得类似的功能.

但是,C#并不是使用CLR的唯一语言.可以编写Managed C++,它可以具有全局功能.

  • @Nawaz:这是一个与本次讨论没有密切关系的实施细节.重点是`System.Reflection.Emit`属于IL,而不属于C#或托管C++或任何其他编译成IL并位于.NET Framework之上的语言.如果托管C++中是否存在全局函数或它们是如何实现的,则无关紧要.重要的是,在解释IL的虚拟或真实机器中,有一个全局函数的概念,并且`System.Reflection.Emit.OpCodes.Call`可用于发出可以调用全局函数的IL操作码. (7认同)

Mar*_*ell 13

在Build 2014大会上,宣布从Roslyn开始,您可以通过using TypeName;指令从类型中导入静态方法,这样System.Math.Min(...)您就可以执行以下操作:

using System.Math;
...
var z = Min(x,y);
Run Code Online (Sandbox Code Playgroud)

注意:到发布时,这变为:

using static System.Math;
Run Code Online (Sandbox Code Playgroud)


jas*_*son 7

因为System.Reflection.Emit.OpCodes.Call不是关于C#.这是关于发射IL操作码.在IL中,有一些C#中没有的功能.全局功能是这些功能之一.