【发布时间】:2013-10-15 21:40:55
【问题描述】:
我有以下基类:
public abstract class ItemComponentSaver<TType> : where TType : ItemComponent
{
public abstract bool SaveItem(TType item, object objectRowInTableFromEF, PropertyInfo columnTypeProperty);
}
这个,也有一些孩子,我支持的每一种类型。我的想法是以后多态地使用它们来执行保存操作,例如
public class CellSaver : ItemComponentSaver<Cell>
{
public override bool SaveItem(Cell item, object objectRowInTableFromEF, PropertyInfo columnTypeProperty)
{
// code here
}
}
现在,我知道在某些时候我需要创建这些东西,所以有不可避免的“switch”之类的声明,我为此创建了一个工厂:
public static class ItemComponentSaverFactory
{
public static ItemComponentSaver<T> GetSaver<T>(ItemComponent entity) where T : ItemComponent
{
if (entity is Cell)
return (ItemComponentSaver<T>)new CellSaver();
if (entity is Row)
return (ItemComponentSaver<T>)new RowSaver();
}
}
问题是,我不能将 CellSaver 转换为返回类型,因为它是通用的。我也可以返回一个接口而不是类 tpe,但是当然,如果我创建接口,我也需要将其设为泛型,因为返回类型是这样的 我该如何优雅地处理这种情况??
【问题讨论】:
标签: c# oop generics switch-statement factory-pattern