接口实现的继承机制

接口实现的继承机制
 
一个类继承了它的基类所提供的接口实现,如果不显示的重新实现接口,派生类就无法改变从基类中继承来的接口映射
案例
     interface IBase
     {
         void Paint();
     }
     class Control:IBase
     {
         public void Paint()
         {
              Console.WriteLine("Control.Paint");
         }
     }
     class test:Control
     {
         new public void Paint()
         {
              Console.WriteLine("test.Paint");
          }
     }
案例中test中的方法Paint覆盖了Control的方法Paint,但却没有改变Control.Paint对IBase.Paint的映射 ,并且在类的实例和接口的实例中对Paint方法的调用会产生以下结果
static void Main()
         {
              Control c = new Control();
              test t = new test();
              IBase ic =c;
              IBase it =t;
              c.Paint();
              t.Paint();
              ic.Paint();
              it.Paint();
         }
输出结果为
Control.Paint
test.Paint
Control.Paint
Control.Paint
 
也就是说test2的方法并没有改变IBase接口的映射
但是,当一个interface方法被映射到类的一个虚方法时,派生类就可以重载这个方法,并改变这个接口的实现。
也就是把上面的例子改成
     class Control:IBase
     {
         public virtual void Paint()
         {
              Console.WriteLine("Control.Paint");
         }
     }
     class test:Control
     {
         public override void Paint()
         {
              Console.WriteLine("test.Paint");
         }
 
     }
这样映射就发生了改变。
 
因为显示说明的接口成员不能被声明成虚,因此无法重载显示接口说明的实现。这时最好采用显示接口实现来调用另外一个方法,这个方法可以声明成虚,可以被重载
案例
     class Control:IBase
     {
         void IBase.Paint()
         {
              this.PaintControl();
         }
         public virtual void PaintControl()
         {
              Console.WriteLine("canrewrite");
         }
     }
     class test:Control
     {
         public override void PaintControl()
         {
              Console.WriteLine("berewrite");
         }
     }
这里显示接口成员可以执行可重载的方法PaintControl来实现重载
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值