初探向上转型

        今天遇到了这样的一段代码:

       public interface A

     {....}

      public class B:A

     {....}

在使用时是这样的:A a=new B();

看到这的时候我就产生了一点疑问,为什么不用B a=new B()?

在问朋友时,朋友跟我解释说:可能是这样的道理,比如说人是一个接口,老人和小孩这两个类都派生于这个接口,对与一个人来说可以是老人也可以是小孩。

哦,我明白了,按照朋友的话说,就是如果定义的是A的变量就既可以指向B 又可以指向其他派生于A的类,这样说的话也有道理。

同时,朋友又给出了另一种解释:

using System ;
interface ISequence {
 int Count { get; set; }
}
interface IRing {
 void Count(int i) ;
}
interface IRingSequence: ISequence, IRing { }
 class CTest {
  void Test(IRingSequence rs) {
   //rs.Count(1) ; 错误, Count 有二义性
   //rs.Count = 1; 错误, Count 有二义性
   ((ISequence)rs).Count = 1; // 正确
   ((IRing)rs).Count(1) ; // 正确调用IRing.Count
  }
}
这样说来,也就是如果一个类继承自多个接口并且这些接口中含有相同的变量,那么通过上面的那种赋值方法就可以准确的知道这个类到底是调用的哪个接口的实现变量,那中强制类型转换跟赋值达到的是同一种的效果。

我突然记起好像在设计模式那本书中的某个模式正是运用的向上转型,但是具体细节有些记不清了。

so 此文未完待续。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值