C# NET5.0 ModuleInitializerAttribute

环境:

VS2019

net5.0

 

ModuleInitializerAttribute:模块初始化

被修饰为ModuleInitializerAttribute的静态方法会被编译器在编译时,在全局的静态构造函数中生成此代码调用。如果有多个被修饰为初始化器的函数,则每个函数生成一个初始化器代码调用,这些初始化器代码调用代码会按照一定的顺序(类型名称顺序和代码顺序)生成。当模块在被加载时,全局静态构造函数开始执行,从而完成模块代码初始化工作

 

模块初始方法要求:

  1. 方法必须是static
  2. 方法必须是普通成员方法,而不是属性访问器、构造函数、本地函数等
  3. 方法必须是无参数的
  4. 该方法必须返回 void
  5. 方法不能是泛型或包含在泛型类型中
  6. 此方法的有效可访问性必须为 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:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值