zoukankan      html  css  js  c++  java
  • 类型构造器


    CLR还支持类型构造器,也称为静态构造器。c#类型构造器可应用引用类型和值类型,永远没有参数。主要作用是:设置类型中静态字段的初始化。类型构造器不一定要在类中定义,但是最多也只能有一个。例:

    class SomeType{
        static SomeType(){}
    }

    jit编译器在编译一个方法时,会查看代码引用哪些类型。任何类型定义了类型构造器,jit编译器都会检查当前AppDomain是否已经执行了这个类型构造器,如果没有就执行,已经执行了就直接返回,不再次执行。在多线程的环境下,可能同一时间有多个执行相同的方法,CLR希望每一个AppDomain中一个类型构造器只执行一次,在调用类型构造器时,使用互斥线程同步锁,解决这个问题。
    类型构造器中只能访问类型的静态字段,一般只是初始化这些字段。
    代码内联初始化字段:

    class SomeType
    {
        Static int x = 5;
    }

    等价于

    class SomeType
    {
        Static int x;
        Static SomeType()
        {
            x = 5;
        }
    }

    还有:

    class SomeType
    {
        Static int x = 3;
        Static SomeType()
        {
            x = 5;
        }
    }
    等价于
    class SomeType
    {
        Static int x;
        Static SomeType()
        {
            x = 3;
            x = 5;
        }
    }

    虽然c#不允许值类型为它的实例化字段使用内联初始化语法,但是静态字段可以的,以上把class改成struct一样可以运行,

    主要原因是:值类型可以定义无参类型构造器,但是不可以定义无参类型实例构造器。


  • 相关阅读:
    什么是web框架
    编写CGI程序步骤
    web开发 c/s结构 和 b/s结构
    python自带的web服务器
    自制计算器
    条件判断
    模版继承
    参数传递
    异常处理
    【uoj#244】[UER #7]短路 CDQ分治+斜率优化dp
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2726430.html
Copyright © 2011-2022 走看看