我有一個泛型類與提供特定類型的子類。你可以繼承一個泛型類與一個特定類型的類嗎?
public abstract class GenericBase<T>
where T:Interface1
{
}
我子類仿製藥與特定的實施方式中:
public class Customer:
GenericBase<Type1>
(Type1
器具Interface1
)。
我有了這個參考另一個抽象基類:
protected GenericBase<Interface1> genericInstance;
最後,當我試圖將genericInstance分配給基類的一個實例,它給了我一個編譯器錯誤,他說,它「不能將客戶隱式轉換爲GenericBase <Interface1>」。
base.genericInstance = new Customer(); //Compiler error
我不明白爲什麼如果Customer
是GenericBase<Type1>
一個亞型,並Type1
實現Interface1
我會得到這個錯誤。如果它是GenericBase<Type1>
的子類,是不是Customer
實際上是一種GenericBase<Interface1>
?
我假設我誤解了這裏的泛型,有沒有辦法允許這種行爲?
不確定在C#中,但是這絕對不能在Java中工作。在Java中,'genericInstance'必須聲明爲'protected GenericBase <?擴展Interface1> genericInstance'(注意:我沒有試過它看它是否真的有效)。 – Powerlord
[協方差和反變量](https://msdn.microsoft.com/en-us/library/ee207183) –
經驗法則是泛型不是協變的,因爲您不能說出將要做什麼。我不能將一個'List'分配給'List ',因爲否則,我可以在'List '中添加一個'Dog',儘管它真的是一個'List ' –
Powerlord