none
没有显式定义类型构造函数和没有使用静态字段内联初始化,CLR还会调用类型构造函数吗? RRS feed

  • 问题

  • 实例构造函数我知道不管隐式还是显式定义都会被调用,在IL中也有体现。

    但是如果没有显式定义类型构造函数和没有使用静态字段内联初始化,IL中是不会生成.cctor的代码的。

    那么CLR还会不会去调用类型构造函数呢?求众道友解答!先谢谢了!

    2014年6月20日 2:08

答案

  • 你好:

    不管什么情况下,构造函数都会被执行,我建议你看一下这个MSDN文档:

    http://msdn.microsoft.com/zh-cn/library/ace5hbzh.aspx

    如果您没有为对象提供构造函数,则默认情况下 C# 将创建一个构造函数,该构造函数实例化对象,并将成员变量设置为默认值表(C# 参考)中列出的默认值。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2014年6月23日 6:22
    版主
  • 也就是说,IL中没有生成静态构造函数的代码,CLR也会调用!

    1. 假如你的类不是一个静态类,那么在IL中应该都会有.ctor构造函数的声明,不管你有没有显示定义一个构造函数,最终构造函数在类的实例被创建的时候都会被执行。

    假如你定义了一个静态的构造函数,在IL中除去默认的.ctor构造函数以外,还会有一个.cctor静态构造函数。静态构造函数会在类的默认构造函数.ctor被执行之前执行,或者在类里面的静态成员被访问之前执行,并且只会执行一次。

    2. 假如你的类是一个静态类,里面只能定义静态构造函数,不能定义实例构造函数,当你定义静态构造函数之后,IL中可以看到.cctor。这个静态构造函数只会在静态类被第一次访问的时候被执行一次。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年6月26日 3:04
    版主

全部回复

  • 你好:

    不管什么情况下,构造函数都会被执行,我建议你看一下这个MSDN文档:

    http://msdn.microsoft.com/zh-cn/library/ace5hbzh.aspx

    如果您没有为对象提供构造函数,则默认情况下 C# 将创建一个构造函数,该构造函数实例化对象,并将成员变量设置为默认值表(C# 参考)中列出的默认值。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2014年6月23日 6:22
    版主
  • 也就是说,IL中没有生成静态构造函数的代码,CLR也会调用!
    2014年6月24日 12:40
  • 也就是说,IL中没有生成静态构造函数的代码,CLR也会调用!

    1. 假如你的类不是一个静态类,那么在IL中应该都会有.ctor构造函数的声明,不管你有没有显示定义一个构造函数,最终构造函数在类的实例被创建的时候都会被执行。

    假如你定义了一个静态的构造函数,在IL中除去默认的.ctor构造函数以外,还会有一个.cctor静态构造函数。静态构造函数会在类的默认构造函数.ctor被执行之前执行,或者在类里面的静态成员被访问之前执行,并且只会执行一次。

    2. 假如你的类是一个静态类,里面只能定义静态构造函数,不能定义实例构造函数,当你定义静态构造函数之后,IL中可以看到.cctor。这个静态构造函数只会在静态类被第一次访问的时候被执行一次。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年6月26日 3:04
    版主