我最近更多地参与了课堂设计。我无法为以下场景提供良好的课程设计。
我有一个通用的抽象基类,为简单起见,它看起来像这样:
public abstract class ElementDataService<T> where T : Element
{
public abstract void InsertElement(T element);
public abstract void UpdateElement(ElementKey key, T element);
public abstract void DeleteElement(ElementKey key);
}
然后我有4个继承自它的子类。 E.g:
public class PointElementDataService : ElementDataService<PointElement>
{
public override void InsertElement(PointElement point)
{
}
public override void UpdateElement(ElementKey key, PointElement point)
{
}
public override void DeleteElement(ElementKey key)
{
}
}
我想实现一个工厂类来创建4个子类中的一个,但似乎没有任何返回类型能够实现这一点。
我想我想在一个对象类型中容纳4个子类中的任何一个,这样我就可以调用insert / update / delete而无需知道它是哪4种类型。
E.g。
public class ElementDataServiceFactory
{
public static ElementDataService<Element> CreateElementDataService(ElementType type)
{
ElementDataService<Element> service = null;
switch (type)
{
case ElementType.Base:
service = BaseElementDataService.CreateBaseElementDataService();
break;
case ElementType.Section:
service = SectionElementDataService.CreateSectionElementDataService();
break;
case ElementType.Point:
service = PointElementDataService.CreatePointElementDataService();
break;
case ElementType.Other:
service = OtherElementDataService.CreateOtherElementDataService();
break;
default:
break;
}
return service;
}
}
显然,由于铸造问题上述情况不起作用,我也没有尝试过任何其他工作(例如通用工厂方法)。
答案 0 :(得分:0)
ElementDataService<PointElement>, ElementDataService<BaseElement>
等不能强制转换为ElementDataService。
public class PointElementDataService : ElementDataService<Element>
{
public override void InsertElement(Element point) { }
public override void UpdateElement(ElementKey key, Element point) { }
public override void DeleteElement(ElementKey key) { }
public static ElementDataService<Element> CreatePointElementDataService()
{
return new PointElementDataService();
}
}