C#优雅 :this之构造函数的使用

通俗来说,可以说是构造函数的继承

   (1) :this()用来继承无参时的构造函数,例如下面代码
static void Main(string[] args)
        {
            AA aA = new AA("c","d");
            Console.WriteLine(aA.aa);
            Console.WriteLine(aA.bb);
            Console.WriteLine(aA.cc);
            Console.WriteLine(aA.dd);
            Console.WriteLine(aA.ee);

            Console.ReadKey();
        }
    }
    class AA
    {
      public  string aa="aa 未初始化";
      public  string bb= "bb 未初始化";
      public  string cc= "cc未初始化";
      public  string dd= "dd 未初始化";
      public  string ee= "ee 未初始化";
        public AA(string c,string d):this()
        {
            this.cc = c;
            this.dd = d;
        }
        public AA()
        {
            this.aa = "a";
            this.bb = "b";
        }
    }

类AA的构造过程为,先构造无参的AA(),然后再对应参数的构造函数,显示结果为
C#优雅 :this之构造函数的使用_第1张图片
(2) :this(para)
如果我们要继承有参的构造函数,则需要构造函数签名的时候就初始化

   如下面代码
class Program
    {
        static void Main(string[] args)
        {
            AA aA = new AA("c","d");
            Console.WriteLine(aA.aa);
            Console.WriteLine(aA.bb);
            Console.WriteLine(aA.cc);
            Console.WriteLine(aA.dd);
            Console.WriteLine(aA.ee);

            Console.ReadKey();
        }
    }
    class AA
    {
      public  string aa="aa 未初始化";
      public  string bb= "bb 未初始化";
      public  string cc= "cc未初始化";
      public  string dd= "dd 未初始化";
      public  string ee= "ee 未初始化";
        public AA(string c,string d):this("e")  //此处初始化了一个参数
        {
            this.cc = c;
            this.dd = d;
        }
        public AA()
        {
            this.aa = "a";
            this.bb = "b";
        }
        //此处是新的带一个参数的构造函数
        public AA(string e)
        {
            this.ee = e;
        }
    }

此代码会优先构造AA(string e)的构造函数,然后继续构造对应的构造函数

    运行结果为

C#优雅 :this之构造函数的使用_第2张图片

简单理解:可以这么理解,有参数的构造函数需要执行无参构造函数中的代码,为了省去重复代码的编写,所以就继承了。
前后顺序为:
先执行:this后面的构造函数,在执行当前的构造函数

你可能感兴趣的:(要优雅)