全局函数是如何在c#中存在的?
本文关键字:存在 函数 全局 | 更新日期: 2023-09-27 18:07:20
全局函数如何在c#中存在,当一切都在类中定义时?我在读操作码的文档。在MSDN上打电话,并惊讶地看到以下文字,
元数据令牌携带足够的信息来确定调用是静态方法、实例方法、虚拟方法、还是全局函数。
全局函数?它在c#中存在吗?(它绝对不是指static
方法,因为它与全局函数一起显式列出)。
你不能在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#编译器生成的功能。