这篇文章主要介绍一下在构造函数中base和this的用法和区别的。接下来的文章会陆续介绍一下静态变量和静态构造函数。希望大家能够将意见反馈给我。
代码最具有说服性了,看下面代码吧:
//代码段一
public  class ConstructorProgram1
    {
      private string name;
      public ConstructorProgram1()
      {
          Console.WriteLine("No Info Left");
      }
      public ConstructorProgram1(string name)
      {
          this.name = name;
          Console.WriteLine("name=" + this.name);
      } 
}
这里我重载了另外一个构造函数,里面的this作为一个指针指示了一个类的引用。即是ConstructorProgram1类的引用。这个很简单,但不是重点。
这篇文章最重点要说一下:this和base在构造函数中扮演的角色。
看下面的代码:
public class ConstructorProgram
    {
       private string name;
       private int age;
  
       public ConstructorProgram():this("bell")
       {
           //Console.WriteLine("No Info Left.");
       }
       public ConstructorProgram(string name)
           :this("Simple Programmer",20)
        {
            this.name = name;
            Console.WriteLine("name=" + this.name);
        }
        public ConstructorProgram(string name, int age)
        {
            this.name = name;
            this.age = age;
            Console.WriteLine("name=" + this.name);
            Console.WriteLine("age=" + this.age);
        }
       public static void Main()
       {
           ConstructorProgram cp1= new ConstructorProgram("goal");
           ConstructorProgram cp2 = new ConstructorProgram();
          
           
       }
    }
    
运行结果:
name=Simple Programmer
age=20
name=goal
name=Simple Programmer
age=20
name=bell
在上面的代码当中,可以看出来这里红色字体的this用来调用ConstructorProgram类的自身的构造函数。明白这句话的涵义,应该会明白执行结果了。
接着下面的代码如下:
 public  class ConstructorProgram1
    {
      private string name;
      private int age;
      public ConstructorProgram1()
      {
          Console.WriteLine("No Info Left");
      }
      public ConstructorProgram1(string name)
      {
          this.name = name;
          Console.WriteLine("name=" + this.name);
      }
      public ConstructorProgram1(string name, int age)
      {
          this.name = name;
          this.age = age;
          Console.WriteLine("name=" + this.name);
          Console.WriteLine("age=" + this.age);
      }
        
}
  public  class ConstructorProgram : ConstructorProgram1
    {
      public ConstructorProgram()
      {
          //Console.WriteLine("sdfsdf");
      }
      public ConstructorProgram(string name)
          : base("goalbell",20)
      {
          Console.WriteLine("name=" + name);
      }
      public static void Main() 
      {
          ConstructorProgram cp = new ConstructorProgram("Programmer");
      }
      
    }
运行结果如下:
name=goalbell
age=20
name=Programmer
可以看出上面的代码,派生类中的base调用了父类(基类)的构造函数了,但是如果不提供初始化(即把 : base("goalbell",20)
不要)指向基类的构造函数的话,它会执行基类中没有参数的构造函数。
会得到如下结果:
name=goalbell
age=20
name=Programmer
No Info Left
结论:
这里只是简单的阐述了一下,如果要详细的来阐述的话,要涉及的构造函数的规则。
如果可以的话,欢迎大家探讨。

评论