1 回答
TA贡献1856条经验 获得超5个赞
从面向对象的角度来看,你想要做的事情是无法完成的。
假设您创建以下类层次结构:
public interface IFoo{}
public interface IBar{}
public class A: IFoo{}
public class B: IFoo{}
public class C:IFoo,IBar {}
然后是以下适配器:
public class TestA : IDataAdapter<A>{}
public class TestB : IDataAdapter<B>{}
public class TestC : IDataAdapter<C>{}
public class TestIFoo : IDataAdapter<IFoo>{}
public class TestIBar : IDataAdapter<IBar>{}
public class TestIBoth : IDataAdapter<IFoo>,IDataAdapter<IBar>{}
如果 TestA 收到 A 的实例,会发生什么很容易。但是 TestIFoo 获得 C 又如何呢?目前,您的反射代码将无法工作,因为您测试了类型相等性(C 等于 IFoo 吗?不!即使 C as IFoo 没问题)。这打破了里氏替换原则。如果某个东西适用于某个类,那么它也应该适用于它的任何子类。
假设您解决了上述问题。现在 TestIBoth 获得 C 怎么样?其中是否有两种不同的 Insert 实现?当然,这是继承所必需的!但是……你必须插入 C 两次吗?还是必须在第一种安装方法中只插入一次?
之所以要经过反思,是因为所有这些问题都需要一个算法的答案。你的编译器将无法回答(这使得语言顺便阻止它)
- 1 回答
- 0 关注
- 76 浏览
添加回答
举报