gpt4 book ai didi

c# - 谁能给我看一个 MethodImplOptions.ForwardRef 的例子

转载 作者:可可西里 更新时间:2023-11-01 08:42:39 27 4
gpt4 key购买 nike

MSDN 上看起来很酷:

Specifies that the method is declared, but its implementation is provided elsewhere.

所以我在控制台应用程序中尝试了它:

public class Program
{
[MethodImplAttribute(MethodImplOptions.ForwardRef)]
public static extern void Invoke();

static void Main(string[] args)
{
Invoke();
Console.Read();
}
}

那我现在该怎么办?我在哪里可以提供 Program.Invoke 的实现?

最佳答案

ForwardRef 的用法大致如下:

consumer.cs

using System;
using System.Runtime.CompilerServices;

class Foo
{
[MethodImplAttribute(MethodImplOptions.ForwardRef)]
static extern void Frob();

static void Main()
{
Frob();
}
}

provider.cs

using System;
using System.Runtime.CompilerServices;

class Foo
{
// Need to declare extern constructor because C# would inject one and break things.
[MethodImplAttribute(MethodImplOptions.ForwardRef)]
public extern Foo();

[MethodImplAttribute(MethodImplOptions.ForwardRef)]
static extern void Main();

static void Frob()
{
Console.WriteLine("Hello!");
}
}

现在是魔术酱。打开 Visual Studio 命令提示符并键入:

csc /target:module provider.cs
csc /target:module consumer.cs
link provider.netmodule consumer.netmodule /entry:Foo.Main /subsystem:console /ltcg

这使用了链接器的一项鲜为人知的功能,我们将托管模块链接在一起。链接器能够将相同形状的类型凝胶在一起(它们需要具有完全相同的方法等)。 ForwardRef 是真正让您在其他地方提供实现的东西。

这个示例有点毫无意义,但您可以想象,如果用不同的语言(例如 IL)实现单个方法,事情会变得更有趣。

关于c# - 谁能给我看一个 MethodImplOptions.ForwardRef 的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com