【发布时间】:2012-05-15 18:45:21
【问题描述】:
public abstract Column<T>
{
private T Value {get;set;}
public abstract string Format();
}
public class DateColumn : Column<DateTime>
{
public override string Format()
{
return Value.ToString("dd-MMM-yyyy");
}
}
public class NumberColumn : Column<decimal>
{
public override string Format()
{
return Value.ToString();
}
}
我遇到的问题是将这些添加到通用集合中。我知道这是可能的,但我怎样才能在一个集合中存储多种类型等
IList<Column<?>> columns = new List<Column<?>()
对于实现这一目标的任何建议,我将不胜感激。目标是将不同的列类型存储在同一个列表中。值得一提的是,我正在使用 NHibernate 和鉴别器来加载适当的对象。最终,Value 需要具有类的类型。
非常感谢您提前提供的帮助。
【问题讨论】:
-
我对这一点感到困惑。泛型有助于类型安全。无论如何,如果你真的想这样做,你不能用 Column
-
不,那行不通,我尝试过使用 Column
-
这个问题已经有a fewduplicates了。除了'base-type'解决方案posted here by JaredPar,我想提出following the adapter pattern to create a non-generic wrapper to this purpose,这样Liskov Substitution Principle就不会被打破。