base其实最大的使用地方在面相对象开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法。
2.1关于base调用基类构造函数
public class A { public A() { Console.WriteLine("Build A"); } } public class B : A { public B() : base() { Console.WriteLine("Build B"); } static void Main() { B b = new B(); Console.ReadLine(); } }
运行结果:
Build A
Build B
2.2关于base在派生类中调用基类的方法。
public class A { public virtual void Hello() { Console.WriteLine("Hello"); } } public class B : A { public override void Hello() { base.Hello();//调用基类的方法,显示Hello Console.WriteLine("World"); } }
运行结果:
Hello
World
下面是我自己改进了一下上面的例子:
public class A { public virtual void Hello() { Console.WriteLine("Hello"); } } public class B : A { public static void Main () { B b = new B(); b.Hello2(); b.Hello(); } public override void Hello() { base.Hello();//调用基类的方法,显示Hello Console.WriteLine("World"); } public void Hello2() { base.Hello();//调用基类的方法,显示Hello } }
运行结果:
Hello
Hello
World
关于Base:
base 关键字用于从派生类中访问基类的成员:
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。
1. 在派生类中调用基类方法。
public class BaseClass { protected string _className = "BaseClass"; public virtual void PrintName() { Console.WriteLine("Class Name: {0}", _className); } } class DerivedClass : BaseClass { public string _className = "DerivedClass"; public override void PrintName() { Console.Write("The BaseClass Name is {0}", base._className); //调用基类方法 base.PrintName(); Console.WriteLine("This DerivedClass is {0}", _className); } } class TestApp { public static void Main() { DerivedClass dc = new DerivedClass(); dc.PrintName(); } } }
运行结果:
The BaseClass Name is BaseClass
Class Name: BaseClass
This DerivedClass is DerivedClass