日期:2014-05-17 浏览次数:20884 次
1.base关键字
在博文《C#类继承中构造函数的用法小结》一文中,我们已经学习到:使用base关键字可以帮助子类显示地调用父类的构造函数。对于这点,我们可以使用前文所给的实例代码(有裁剪)来进行说明,具体代码如下:
//父亲类 public class FatherClass { public FatherClass() { Console.WriteLine("FatherClass Constructor:FatherClass()"); } public FatherClass(string from) { Console.WriteLine("FatherClass Constructor:FatherClass({0})", from); } } //小霸王类,我是小霸王,腰里别只鸡 public class MeClass : FatherClass { public MeClass() { Console.WriteLine("MeClass Constructor:MeClass()"); } public MeClass(string from) : base(from) { Console.WriteLine("MeClass Constructor:MeClass({0})", from); } } static void Main(string[] args) { //类实例化,含参数 string from = "tiana0"; Console.WriteLine("类实例化,调用有参构造函数:"); MeClass me1 = new MeClass(from); }
运行程序,结果如下:
代码分析:
代码中定义了子类MeClass 及父类FatherClass,子类和父类均包含两个构造函数:一个无参构造函数和一个有参构造函数。在对子类MeClass 进行实例化时,会调用该类的有参构造函数,该构造函数的声明中包含了“: base(from)”,这将告诉编译器子类需要显式地去调用父类的有参构造函数。
那么我们去掉“: base(from)”,结果又会怎样呢?
去掉“: base(from)”,再次运行程序,结果如下:
很显然,在子类被实例化时,调用的是父类的无参构造函数。这是编译器的自作主张而已,也就是说,子类若不显式的调用父类的构造函数时,编译器会自动调用父类的无参构造函数。这些,在文章《C#类继承中构造函数用法小结 》有详细说明,有不解之处,可以去查阅。
除了这点,那么base关键字还有其他什么用处吗?
答案是肯定的。使用base关键字可以帮助子类调用基类上已被其他方法重写的方法。
对于这点,我们给出下面的实例代码:
//父亲类 public class FatherClass//:GrandfatherClass { protected string strFather = "I'm your father,gay!"; public virtual void ShowInfo() { Console.WriteLine("{0}", strFather); } } //小霸王类,我是小霸王,腰里别只鸡 public class MeClass : FatherClass { private string strMe = "I'm your son,gay!"; public override void ShowInfo() { Console.WriteLine("{0}", strMe); } } static void Main(str