当一个接口被一个基类实现,此基类又被另外一个类继承;例如:
interface ITest{
void test();
}
class BClass:ITest{
public void test(){------}
}
class CClass:BClass{
public new void test(){------}
}
CClass的test()没有改变BClass.test()到借口ITest.test方法的映射:
例如:
BClass b=new BClass();
CClass c=new CClass();
ITest ib=b;
ITest ic=c;
//
b.test(); //调用BClass().test();
c.test(); //调用CClass().test();
ib.test(); //调用BClass().test();///////为什么了!因为一个派生类不能改变从基类继承来的接口映射
ic.test(); //调用BClass().test();
但是当基类中的一个虚拟方法实现对借口的影射时,此积累又被另外一个类继承,并且此派生类有方法override基类方法,那么,通过派生类取得的接口实例将改变接口的映射,改变成从派生类映射接口;
例如:
interface ITest{
void test();
}
class BClass:ITest{
public virtual void test(){------}
}
class CClass:BClass{
public override void test(){------}
}
派生类改变映射;
BClass b=new BClass();
CClass c=new CClass();
ITest ib=b;
ITest ic=c;
//
b.test(); //调用BClass().test();
c.test(); //调用CClass().test();
ib.test(); //调用BClass().test();
ic.test(); //调用CClass().test();////为什么了!因为派生类方法CClasss.test()映射到接口