首页 / 软件开发 / .NET编程技术 / [你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器
[你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器2011-03-23 博客园 Anytao1 引言今天Artech兄在《关于Type Initializer和 BeforeFieldInit的问题,看看大家能否给出正确的解释》一文中让我们认识了一个关于类型构造器调用执行的有趣示例,其中也相应提出了一些关于beforefieldinit对于类型构造器调用时机的探讨,对于我们很好的理解类型构造器给出了一个很好的应用实践体验。作为补充,本文希望从基础开始再层层深入,把《关于Type Initializer和 BeforeFieldInit的问题,看看大家能否给出正确的解释》一文中没有解释的概念和原理,进行必要的补充,例如更全面的认识类型构造器,认识BeforeFieldInit。并在此基础上,探讨一点关于类型构造器的实践应用,同时期望能够回答其中示例运行的结果。废话少说,我们开始。2 认识对象构造器和类型构造器在.NET中,一个类的初始化过程是在构造器中进行的。并且根据构造成员的类型,分为类型构造器(.cctor)和对象构造器(.ctor), 其中.cctor和.ctor为二者在IL代码中的指令表示。.cctor不能被直接调用,其调用规则正是本文欲加阐述的重点,详见后文的分析;而.ctor会在类型实例化时被自动调用。基于对类型构造器的探讨,我们有必要首先实现一个简单的类定义,其中包括普通的构造器和静态构造器,例如// Release : code01, 2008/11/02
// Author : Anytao, http://www.anytao.com
public class User
{
static User()
{
message = "Initialize in static constructor.";
}
public User()
{
message = "Initialize in normal construcotr.";
}
public User(string name, int age)
{
Name = name;
Age = age;
}
public string Name { get; set; }
public int Age { get; set; }
public static string message = "Initialize when defined.";