今天遇到了这样的一段代码:
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 此文未完待续。。。。。