唯一的情況下,我可以看到,它會做你的描述會是什麼,如果一個人希望來存儲對象是有用的當一個類可能希望存儲的類(它們都做這兩件事)不共享一個共同的基類型時,它們都來自一個特定的類並實現一個特定的接口。例如,可能有一個由Foo,CloneableFoo(源自Foo並實現可複製接口),DerivedFoo(源自Foo,並且不實現克隆)的CloneableDerivedFoo(源自Foo並實施克隆),並且人們可能希望有一種方法可以接受任何允許克隆的Foo衍生物。請注意,集合中允許的唯一通用基本類型CloneableFoo和CloneableDerivedFoo是Foo,它不允許克隆。
該問題的一個解決方案是導出一個接口,其中的單個成員「self」是T類型的只讀屬性。任何接口IW可能要用於與另一個接口或基類聯合應該聲明一個通用表格IWither < out T >它繼承了非泛型形式,也是ISelf <T>。任何實現該風格的通用接口的類都應該以明顯的方式實現ISelf <ItsOwnClass>(僅返回本身)。
如果這樣做了,可以聲明一個實現使用實現ISelf的嵌套接口的接口的任意組合的對象,並且可以在沒有類型轉換的情況下使用任何類型的對象(通過使用適當數量的「.Self 「物業訪問者)。有趣的是,可以對任何實現一組這樣的接口的類進行類型轉換,以實現它們的任何嵌套組合。例如,IFoo的< IBAR < IBoz <WhateverDerived> > >可以強制轉換爲一個IBoz < IBAR <的IFoo <WhateverBase> > >。
所以基本上你要找的是沒有類型安全的類型安全? –
你是什麼意思,它不會編譯? –