环境:
VS2019
net5.0
ModuleInitializerAttribute:模块初始化
被修饰为ModuleInitializerAttribute的静态方法会被编译器在编译时,在全局的静态构造函数中生成此代码调用。如果有多个被修饰为初始化器的函数,则每个函数生成一个初始化器代码调用,这些初始化器代码调用代码会按照一定的顺序(类型名称顺序和代码顺序)生成。当模块在被加载时,全局静态构造函数开始执行,从而完成模块代码初始化工作
模块初始方法要求:
- 方法必须是static
- 方法必须是普通成员方法,而不是属性访问器、构造函数、本地函数等
- 方法必须是无参数的
- 该方法必须返回 void
- 方法不能是泛型或包含在泛型类型中
- 此方法的有效可访问性必须为 internal 或 public
public class Class1
{
public void Test()
{
Console.WriteLine("执行Test方法");
}
}
public class ModuleInit
{
static ModuleInit()
{
//先执行
Console.WriteLine("ModuleInit静态构造函数 cctor");
}
[ModuleInitializer]
internal static void Initializer()
{
//在静态构造函数执行后才执行
Console.WriteLine("模块初始化器");
}
[ModuleInitializer]
internal static void Initializer1()
{
//在静态构造函数执行后才执行
Console.WriteLine("模块初始化器1");
}
}
public class ModuleInit1
{
static ModuleInit1()
{
//先执行
Console.WriteLine("ModuleInit1静态构造函数 cctor");
}
[ModuleInitializer]
internal static void Initializer()
{
//在静态构造函数执行后才执行
Console.WriteLine("ModuleInit1+Initializer");
}
[ModuleInitializer]
internal static void Initializer1()
{
//在静态构造函数执行后才执行
Console.WriteLine("ModuleInit1+Initializer1");
}
}
program:
static void Main(string[] args)
{
Console.WriteLine("Main");
Class1 obj = new Class1();
Console.ReadKey();
}
output: