用abstract,virtual ,interface三种方法做同一个例子 virtual: using System; using System.Collections.Generic; using System.Text; namespace Test ... { class Employee ...{ protected string _name; public Employee() ...{ } public Employee(string name) ...{ _name = name; } public virtual void StartWork() ...{ Console.WriteLine(_name+"Start Work"); } } class Manager:Employee ...{ public Manager(string name):base(name)...{} public override void StartWork() ...{ base.StartWork(); Console.WriteLine("Orders to staff"); } } class Secretary:Employee ...{ public Secretary(string name):base(name)...{} public override void StartWork() ...{ base.StartWork(); Console.WriteLine("Assist the Manager"); } } class Seller:Employee ...{ public Seller(string name):base(name)...{} public override void StartWork() ...{ base.StartWork(); Console.WriteLine("Product sales"); } } class Accountant : Employee ...{ public Accountant(string name) : base(name) ...{ } public override void StartWork() ...{ base.StartWork(); Console.WriteLine("Manage finance of company"); } } class PolymorphismTest ...{ static void Main() ...{ Employee[] emp=new Employee[5]; emp[0] = new Manager("Manager"); emp[1] = new Secretary("Secretary"); emp[2] = new Seller("Seller1"); emp[3] = new Seller("Sell2"); emp[4] = new Accountant("Accountant"); Console.WriteLine("8 o'colck, Start Work"); foreach (Employee e in emp) ...{ e.StartWork(); } } }} abstract: using System; using System.Collections.Generic; using System.Text; namespace AbstractPolymorphismTest ... { abstract class Employee ...{ protected string _name; protected Employee() ...{ } protected Employee(string name) ...{ _name = name; } public abstract void StartWork(); } class Manager : Employee ...{ public Manager(string name) : base(name) ...{ } public override void StartWork() ...{ Console.WriteLine(_name+"Orders to staff"); } } class Secretary : Employee ...{ public Secretary(string name) : base(name) ...{ } public override void StartWork() ...{ Console.WriteLine(_name+"Assist the Manager"); } } class Seller : Employee ...{ public Seller(string name) : base(name) ...{ } public override void StartWork() ...{ Console.WriteLine(_name+"Product sales"); } } class Accountant : Employee ...{ public Accountant(string name) : base(name) ...{ } public override void StartWork() ...{ Console.WriteLine(_name+"Manage finance of company"); } } class AbstractPolymorphismTest ...{ static void Main() ...{ Employee[] emp = new Employee[5]; emp[0] = new Manager("Manager"); emp[1] = new Secretary("Secretary"); emp[2] = new Seller("Seller1"); emp[3] = new Seller("Sell2"); emp[4] = new Accountant("Accountant"); Console.WriteLine("8 o'colck, Start Work"); foreach (Employee e in emp) ...{ e.StartWork(); } } }} interface: using System; using System.Collections.Generic; using System.Text; namespace InterfacePolymorphismTest ... { interface IEmployee ...{ void StartWork(); } class Manager : IEmployee ...{ private string _name; public Manager(string name) ...{ _name = name; } public void StartWork() ...{ Console.WriteLine(_name + "Orders to staff"); } } class Secretary : IEmployee ...{ private string _name; public Secretary(string name) ...{ _name = name; } public void StartWork() ...{ Console.WriteLine(_name + "Assist the Manager"); } } class Seller : IEmployee ...{ private string _name; public Seller(string name) ...{ _name = name; } public void StartWork() ...{ Console.WriteLine(_name + "Product sales"); } } class Accountant : IEmployee ...{ private string _name; public Accountant(string name) ...{ _name = name; } public void StartWork() ...{ Console.WriteLine(_name + "Manage finance of company"); } } class InterfacePolymorphismTest ...{ static void Main() ...{ IEmployee[] emp = new IEmployee[5]; emp[0] = new Manager("Manager"); emp[1] = new Secretary("Secretary"); emp[2] = new Seller("Seller1"); emp[3] = new Seller("Sell2"); emp[4] = new Accountant("Accountant"); Console.WriteLine("8 o'colck, Start Work"); foreach (IEmployee e in emp) ...{ e.StartWork(); } } }}