用关键字virtual和override分别声明虚函数和重写函数,虚方法主要应用于定义接口。 实例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace elitor_virtual_override { /* *********************************************************************************** * * 定义一个类CDemensions * *********************************************************************************** */ public class CDemensions { protected double x, y;//默认为private,定义为protected则派生类可以访问 public const double PI = Math.PI;//默认为private,定义为public则访问权限最高 public CDemensions(double x1, double y1)//默认为private,定义为public则访问权限最高 { x = x1; y = y1; } public virtual double Area() { Console.WriteLine("基类输出"); return x * y; } } /* *********************************************************************************** * * 定义一个类CCircle,继承基类CDemensions * *********************************************************************************** */ public class CCircle : CDemensions { public CCircle(double r) : base(r, 0) { } //构造函数,向基类传递参数 public override double Area() { //return base.Area();这是自动生成的. Console.WriteLine("派生类CCircle输出"); return PI * x * x; } } /* *********************************************************************************** * * 定义一个类CSphere,继承基类CDemensions * *********************************************************************************** */ public class CSphere : CDemensions { public CSphere(double r) : base(r, 0) { }//构造函数,向基类传递参数 public override double Area() { Console.WriteLine("派生类CSphere输出"); return 4 * PI * x * x; } } class CTest { static void Main(string[] args) { CCircle c1 = new CCircle(3.0); CSphere s1 = new CSphere(3.0); Console.WriteLine("圆的面积是: {0}/n", c1.Area()); Console.WriteLine("椭圆的面积是: {0}/n", s1.Area()); Console.ReadLine(); } } }