正文

探讨一下构造函数中base和this的用法与区别(C#版)2007-10-12 21:45:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goalbell/30049.html

分享到:

这篇文章主要介绍一下在构造函数中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 结论: 这里只是简单的阐述了一下,如果要详细的来阐述的话,要涉及的构造函数的规则。 如果可以的话,欢迎大家探讨。

阅读(3436) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册