Gen*_*ari 9 .net c# generics subclass
我有一个泛型类,其子类提供特定类型.
public abstract class GenericBase<T>
where T:Interface1
{
}
Run Code Online (Sandbox Code Playgroud)
我将泛型与特定实现子类化:
public class Customer:
GenericBase<Type1>
Run Code Online (Sandbox Code Playgroud)
(Type1实施Interface1).
我有另一个抽象基类,它引用了这个:
protected GenericBase<Interface1> genericInstance;
Run Code Online (Sandbox Code Playgroud)
最后,当我尝试将genericInstance分配给基类的实例时,它给了我一个编译器错误,说它"无法隐式地将Customer转换为GenericBase <Interface1>".
base.genericInstance = new Customer(); //Compiler error
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我会得到这个错误,如果Customer是一个子类型GenericBase<Type1>和Type1实现Interface1.是不是Customer有效的一种类型GenericBase<Interface1>,如果它是一个子类GenericBase<Type1>?
我想我在这里误解了一些关于泛型的东西; 有没有办法允许这种行为?
Dav*_*d L 11
在C#中,协方差(将派生类型分配给基类型)不能应用于泛型类.因此,您需要在新接口上使用out参数修饰符来应用专门标记为协变的IGenericBase接口.
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> {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2553 次 |
| 最近记录: |