<Module>类的目的是什么?

c#

在反编译 .NET 程序集时,我注意到编译器添加了一个以<Module>全局命名空间命名的空内部类。此类不在程序集中的任何其他地方使用,其名称是非法的 C# 标识符。

这个类是什么,它的目的是什么?

回答

根据CLI 的 Ecma 规范的§II.10.8 ,<Module>该类包含程序集的全局字段和方法

C# 没有这样的概念,但是 .NET 运行时使用这个类来支持模块初始值设定项。

从 C# 9.0 开始,可以从代码定义模块初始值设定项。这个片段:

using System.Runtime.CompilerServices;

public static class C {
    [ModuleInitializer]
    public static void M() {
    }
}

将编译成这样的:

internal class <Module>
{
    static <Module>()
    {
        C.M();
    }
}
public static class C
{
    // On frameworks earlier than .NET 5 you have to define the attribute yourself.
    [ModuleInitializer]
    public static void M()
    {
    }
}

<Module>的静态构造函数将在程序集加载时执行一次,并将调用所有以ModuleInitializerAttribute.

作为旁注,<Module>该类没有祖先(其BaseType属性设置为null);使用反射时要记住的事情。


以上是&lt;Module&gt;类的目的是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>