用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();
}
}
}
}
本文通过 C# 代码示例介绍了三种实现多态的方法:使用 virtual 和 override 关键字、抽象类以及接口。每种方法都展示了如何定义员工基类及不同职位的派生类,并实现了 StartWork 方法来展示多态行为。
966

被折叠的 条评论
为什么被折叠?



