• C#构造函数

    引用类型的实例构造函数不能被继承(不过,可以通过 base 关键字调用父类的构造函数),它负责初始化类型的实例字段。

    对于静态字段,由静态构造函数负责。当然,也可以在实例构造函数中为静态成员赋值,但是,当之后更改这个值,再创建一个新的实例时,你会发现值又被实例构造函数改回去了。

    所以,通常在静态构造函数中为静态成员赋值 (因为它只会执行一次)。

    如果类型没有定义任何构造函数,C# 会生成一个无参实例构造函数(.ctor),它遍历类 型中所有的成员,并将它们设置为默认值。

    可以声明多个不同的构造函数。可以利用 this 关键字来调用其他构造函数。例如:

    public class AClass
    {
        public int i;
        public static int j;
        static AClass()
        {
            j = 2;
            Console.WriteLine("静态构造函数");
        }
        public AClass() : this(5)
        {
            Console.WriteLine("实例构造函数");
        }
        public AClass(int i)
        {
            this.i = i;
            Console.WriteLine("有参数的实例构造函数");
        }
    }

    在这个例子中,我们使用下面的代码新建实例:

    static void Main(string[] args)
    {
        var a = new AClass();
        Console.WriteLine(a.i);
    
        var b = new AClass(10);
        Console.WriteLine(b.i);
        Console.ReadKey();
    }

    根据规则,创建 a 时,调用无参的构造函数。但无参的构造函数调用了有参的构造函数,所以,先执行有参的构造函数,将 i 设置为 5,再执行无参的构造函数。

    创建 b 则只调用有参的构造函数。最后的输出结果如下图所示。

更多...

加载中...