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 沒問題)。這打破了里氏替換原則。如果某個東西適用于某個類,那么它也應該適用于它的任何子類。
假設您解決了上述問題?,F在 TestIBoth 獲得 C 怎么樣?其中是否有兩種不同的 Insert 實現?當然,這是繼承所必需的!但是……你必須插入 C 兩次嗎?還是必須在第一種安裝方法中只插入一次?
之所以要經過反思,是因為所有這些問題都需要一個算法的答案。你的編譯器將無法回答(這使得語言順便阻止它)
- 1 回答
- 0 關注
- 118 瀏覽
添加回答
舉報