全局函数是如何在c#中存在的?

本文关键字:存在 函数 全局 | 更新日期: 2023-09-27 18:07:20

全局函数如何在c#中存在,当一切都在类中定义时?我在读操作码的文档。在MSDN上打电话,并惊讶地看到以下文字,

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

全局函数?它在c#中存在吗?(它绝对不是指static方法,因为它与全局函数一起显式列出)。

全局函数是如何在c#中存在的?

你不能在c#中使用全局函数,这不是语言的一部分。你必须在你选择的类上使用静态方法来获得类似的功能。

然而c#并不是唯一使用CLR的语言。可以编写托管c++,它可以具有全局函数。

在Build 2014会议上宣布,从Roslyn开始,您可以通过using TypeName;指令从类型导入静态方法,这样您就不必使用System.Math.Min(...)了:

using System.Math;
...
var z = Min(x,y);

注意:到发布时,它变成了:

using static System.Math;

因为System.Reflection.Emit.OpCodes.Call与c#无关。它是关于发出IL操作码的。在IL中,有一些c#中没有的特性。全局函数就是其中之一。

您所引用的文档是针对。net的。c#不支持全局函数,但是。net支持。

我只是重写了我之前的答案…

以下是它们在IL DASM中的样子及其相关代码:

// Static Method
IL_0001:  call       void testapp.Form1::Test()
// Instance Method
IL_0001:  call       instance void testapp.Form1::Test()
// Virtual Method
IL_0001:  callvirt   instance void testapp.Form1::Test()
// Global Function
IL_0000:  call       void testapp.Test()

所以回答你的问题,在c#的最后一种方法中没有直接的方法来生成元数据令牌。我必须在c++中创建最后一个

我认为事情是,这是IL注入操作,但IL是不是绝对只关于c#。换句话说,它是为了支持支持全局函数的语言。

c#并不支持MSIL的所有特性。全局函数就是其中之一。VB。. Net、f#、IronPython或其他可能使用此功能的语言,以及其他不是由c#编译器生成的功能。