《C#与.net Framework实战演练》P212 11-8 使用接口
为了达到抽象化(Abstraction)的目的,需要在功能提供者与功能使用者之间提供一个共享的规则,功能提供者与功能使用者都要按照这个规范来提供、使用这些功能。这个共享的规范就称为接口(Interface)。就C#来说,接口定义了功能数量、函数名称、函数参数和参数顺序等。
因此,在接口不变的前提下,功能提供者就可以任意地覆盖函数中的代码,而不会影响到使用这些功能的程序,可以减轻维护上的负担,并增强程序的派生性。
下面是今天晚上大山峰对接口的用处举的一个例子
乞力马扎罗() 21:10:07
例如上帝定义一个接口,IMan,该接口中定义了一个方法Love(IWoman girl)
乞力马扎罗() 21:10:23
上帝仅仅是给出了这个接口的定义
乞力马扎罗() 21:11:07
具体怎么去实现就需要实现了该接口的每一个实例自己去想办法了
P215
声明接口时要注意:
·接口声明可以包含接口属性、事件和内容声明,跟接口的方法一样,只有声明没有内容块
·一个类可以实现零到多个接口,但不能继承多个类。而一个接口则允许继承多个接口。
·类必需实现所有继承下来的接口的所有接口方法,不允许只实现部分的方法。
以下是P213的例子,有不同,因为书上原来的不是完整的程序代码
using System;
namespace studyInterface
{
//定义两个接口,在接口里,只声明方法,不包含方法的内容块
interface IJob
{
//定义在接口中的方法隐含是public
double ComputeSalary();
}
interface IInsurance
{
double ComputeGinBouFee();
}
//定义类Employee,声明这个类继承自IJob和IInsurance两个接口
public class Employee : IJob, IInsurance
{
//定义三个成员变量
protected string mstrEmpID = "";
protected string mstrEmpName = "";
protected double mdblBaseSalary = 0;
//构造函数
public Employee(string EmpID, string EmpName, double BaseSalary)
{
mstrEmpID = EmpID;
mstrEmpName = EmpName;
mdblBaseSalary = BaseSalary;
}
//实现继承到的两个接口里声明过的所有方法
//实现时和接口中的方法声明拥有四个相同:访问权限、返回值类型、方法名、参数
public virtual double ComputeSalary()
{
return mdblBaseSalary;
}
public virtual double ComputeGinBouFee()
{
return mdblBaseSalary * 0.01;
}
//Employee类的其他方法
public string GetEmpID()
{
return mstrEmpID;
}
public string GetEmpName()
{
return mstrEmpName;
}
}
public class Program
{
public static int Main()
{
Employee e1 = new Employee("001", "Miles", 5000);
Console.WriteLine("员工:员工名称={0},员工代号={1},工资={2},保健费={3}", e1.GetEmpName(), e1.GetEmpID(), e1.ComputeSalary(), e1.ComputeGinBouFee());
return 0;
}
}
}