c# – 你可以使用特定类型的类对泛型类进行子类化吗?

我有一个泛型类,其子类提供特定类型.

public abstract class GenericBase<T>
    where T:Interface1
{
}

我将泛型与特定实现子类化:

public class Customer:
    GenericBase<Type1>

(Type1实现Interface1).

我有另一个抽象基类,它引用了这个:

protected GenericBase<Interface1> genericInstance;

最后,当我尝试将genericInstance分配给基类的实例时,它给了我一个编译器错误,说它“无法隐式地将Customer转换为GenericBase< Interface1>”.

base.genericInstance = new Customer(); //Compiler error

如果Customer是GenericBase< Type1>的子类型,并且Type1实现了Interface1,我不明白为什么会出现此错误.客户是否有效地是一种GenericBase< Interface1>,如果它是GenericBase的子类< Type1>?

我想我在这里误解了一些关于泛型的东西;有没有办法允许这种行为?

最佳答案
在C#中,协方差(将派生类型分配给基类型)不能应用于泛型类.因此,您需要在新的IGenericBase接口上使用out parameter modifier来应用专门标记为协变的接口.

protected IGenericBase<Interface1> genericInstance = new Customer();

public interface IGenericBase<out T> {}

public abstract class GenericBase<T> : IGenericBase<T>
    where T:Interface1 {}

public interface Interface1 {}

public class Type1 : Interface1 {}

public class Customer: GenericBase<Type1> {}

转载注明原文:c# – 你可以使用特定类型的类对泛型类进行子类化吗? - 代码日志