关于‘.NET’

IL指令的使用

发表于2009年2月9日

http://msdn.microsoft.com/en-us/magazine/cc301368.aspx

这篇文章介绍了MSIL大部分指令的使用。

.NET类的成员变量初始化与构造函数执行的顺序

发表于2009年2月5日

.NET类的成员变量初始化与构造函数执行的顺序是怎样的呢?可以通过下面的测试得出。

namespace MSIL.Tests
{
    public class BaseType
    {
        string field = Helper.WriteLine("base type instance field");
        static string staticField = Helper.WriteLine("base type static field");
 
        static BaseType()
        {
            Console.WriteLine("base type cctor");
        }
 
        public BaseType()
        {
            Console.WriteLine("base type ctor");
        }
    }
 
    public class DerivedType : BaseType
    {
        string field = Helper.WriteLine("derived type instance field");
        static string staticField = Helper.WriteLine("derived type static field");
 
        static DerivedType()
        {
            Console.WriteLine("derived type cctor");
        }
 
        public DerivedType()
        {
            Console.WriteLine("derived type ctor");
        }
    }
 
    public class Helper
    {
        public static string WriteLine(string info)
        {
            Console.WriteLine(info);
            return info;
        }
    }
 
    [TestFixture]
    public class BaseTypeTestFixture
    {
        [Test]
        public void TestNewDerivedType()
        {
            var obj = new DerivedType();
        }
    }
}

在执行了TestNewDerivedType这个用例后会在输出中显示如下结果:

derived type static field
derived type cctor
derived type instance field
base type static field
base type cctor
base type instance field
base type ctor
derived type ctor

可以得出其顺序是:

  1. 派生类静态成员变量
  2. 派生类静态构造函数
  3. 派生类实例成员变量
  4. 基类静态成员变量
  5. 基类静态构造函数
  6. 基类实例成员变量
  7. 基类实例构造函数
  8. 派生类实例构造函数

实际上在这个过程中一直到System.Object的构造函数都会被执行。

另见
Essential .NET Volume 1: The Common Language Runtime Page 60 Types and Initialization

基于.NET的操作系统

发表于2009年2月5日

http://www.gocosmos.org/index.en.aspx

http://sharpos.org/
sharpos有个iso的下载可以在vmware里直接运行