代码
 1 using System;
 2 
 3 namespace Inheritance
 4 {
 5     //类型object是所有类的最基本类,下面的类A就是显示的从object派生出来的。
 6     class A
 7     {
 8         public void F() { Console.WriteLine("A.F"); }
 9     }
10     //下面的类B是从类A中派生出来的
11     class B : A
12     {
13         public void G() { Console.WriteLine("B.G"); }
14     }
15 
16     /*方法和索引以及属性可以是虚拟的,这就意味着他们的执行可以在派生类中被覆盖。下面的Demo
17      就是一个具有虚拟方法F的类C以及一个覆盖了F的类D*/
18     class C
19     {
20         public C()
21         {
22             Console.WriteLine("这里是C类的构造函数");
23         }
24         public virtual void F()
25         {
26             Console.WriteLine("C.F");
27         }
28     }
29     class D : C
30     {
31         public D()
32             : base()//当实例化类D时,这里就会去调用D类的基类C中的构造函数
33         {
34 
35         }
36         public override void F()
37         {
38             //在这里覆盖方法包括调用了base.F(),这里调用了C中的被覆盖方法!
39             //base关键字是用于从派生类中访问基类的成员,是指定创建派生类实例时英调用的基类的构造函数,这里是用于基类上被其他方法覆盖的方法
40             base.F();
41             Console.WriteLine("B.F");
42         }
43     }
44 
45     //一个类可以表明他是被完全抽象的,且由于含有abstract修改函数,只是作为其他类的一个基类
46     //这样一个类被称为一个abstract class。抽象类可以指定非抽象派生类必须执行的成员
47     abstract class X
48     {
49         public abstract void Y();
50     }
51     class Z : X
52     {
53         public override void Y()
54         {
55             Console.WriteLine("Z.Y");
56         }
57     }
58 }
59