using System ;public class Person {protected string ssn = "111-222-333-444" ;protected string name = "张三" ;public virtual void GetInfo() {Console.WriteLine("姓名: {0}", name) ;Console.WriteLine("编号: {0}", ssn) ;}}class Employee: Person {public string id = "ABC567EFG23267" ;public override void GetInfo() {// 调用基类的GetInfo方法:base.GetInfo();Console.WriteLine("成员ID: {0}", id) ;}}class TestClass {public static void Main() {Employee E = new Employee() ;E.GetInfo() ;}}
程序运行输出: 姓名: 张三 编号: 111-222-333-444 成员ID: ABC567EFG23267 示例:派生类同基类进行通信。
using System ;public class Parent{string parentString;public Parent( ){ Console.WriteLine("Parent Constructor.") ; }public Parent(string myString) {parentString = myString;Console.WriteLine(parentString) ;}public void print( ){ Console.WriteLine("I'm a Parent Class.") ; }}public class Child : Parent{public Child( ) : base("From Derived"){ Console.WriteLine("Child Constructor.") ; }public void print( ) {base.print( ) ;Console.WriteLine("I'm a Child Class.") ;}public static void Main( ) {Child child = new Child( ) ;child.print( ) ;((Parent)child).print( ) ;}}程序运行输出: From DerivedChild Constructor.I'm a Parent Class.I'm a Child Class.I'm a Parent Class. 说明: 1.派生类在初始化的过程中可以同基类进行通信。 上面代码演示了在子类的构造函数定义中是如何实现同基类通信的。分号":"和关键字base用来调用带有相应参数的基类的构造函数。输出结果中,第一行表明:基类的构造函数最先被调用,其实在参数是字符串"From Derived"。 2.有时,对于基类已有定义的方法,打算重新定义自己的实现。 Child类可以自己重新定义print( )方法的实现。Child的print( )方法覆盖了Parent中的 print 方法。结果是:除非经过特别指明,Parent类中的print方法不会被调用。 3.在Child类的 print( ) 方法中,我们特别指明:调用的是Parent类中的 print( ) 方法。 方法名前面为"base",一旦使用"base"关键字之后,你就可以访问基类的具有公有或者保护权限的成员。 Child类中的print( )方法的执行结果出现上面的第三行和第四行。 4.访问基类成员的另外一种方法是:通过显式类型转换。 在Child类的Main( )方法中的最后一条语句就是这么做的。记住:派生类是其基类的特例。这个事实告诉我们:可以在派生类中进行数据类型的转换,使其成为基类的一个实例。上面代码的最后一行实际上执行了Parent类中的 print( )方法。