【发布时间】:2014-10-21 14:39:54
【问题描述】:
假设我有一个通用抽象类:
ClassA<T> where T: ClassB
现在
public class ClassC: ClassB
和
public class NewClass: ClassA<ClassC>
我可以使用默认构造函数创建NewClass 对象,但我找不到将其保存在更通用ClassA<T> 对象的通用集合中的方法。
列表定义为
List<ClassA<ClassB>>
无法容纳NewClass 对象。我想在同一个集合中保留不同的派生类型。有没有办法在 C# 中做到这一点?
另外,如果可能的话,我想避免使用接口和虚拟调用。
【问题讨论】:
-
为什么要避免接口?我宁愿避免子类化,更喜欢组合而不是继承en.wikipedia.org/wiki/Composition_over_inheritance
-
@DennisTraub 我正在设计一个游戏引擎的原型,而接口调用对于这个目的来说太昂贵了。
-
我假设使用动态或无类型列表已经过时了...为什么要使用所有不同的通用基本类型?
-
@Tarec :接口调用比普通实例调用更昂贵,但如果您处于这种思维模式,实例调用比静态调用更昂贵。静态调用比访问编译时常量更昂贵。那么你应该创建一个编译时常量游戏吗?当然不是!接口调用不太可能对您的性能产生任何可衡量的影响。
标签: c# list generics inheritance