动态创建从抽象类派生的类的实例
本文关键字:实例 派生 抽象类 创建 动态 | 更新日期: 2023-09-27 18:01:00
我有两个类,它们是从抽象类派生的
abstract class Order
{
public virtual boolean Export()
{
...
}
}
class TradeOrder : Order
{
public override bool Export()
{
//Create a new order
}
}
class LibraryOrder : Order
{
public override bool Export()
{
//Dont create order but Update an existing order
}
}
TradeOrder是为customertype"Trade"创建的,LibraryOrder是为customertype"Library"创建的。
客户类型将在不久的将来增长。
如何在不使用if…else或swith…的情况下基于客户类型创建派生类的实例。。。案例
该类的实例将调用导出方法来创建或更新销售订单。
-Alan-
这里有一种实现您想要的东西的方法。我们可以称之为"约定而非配置方法",因为很明显,派生的订单类型名称和枚举名称必须匹配。
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var customerType = CustomerType.Library;
var order = (Order)Activator.CreateInstance("ConsoleApplication2", "ConsoleApplication2." + customerType.ToString() + "Order").Unwrap();
}
}
public enum CustomerType
{
Trade,
Library
}
public abstract class Order
{
public virtual void Export() { }
}
public class TradeOrder : Order
{
public override void Export() { }
}
public class LibraryOrder : Order
{
public override void Export() { }
}
}
我建议有一个对象类型名称和类型的映射,并根据映射创建实例。映射详细信息可以在代码中初始化,也可以从外部源(Ex.Config文件(初始化。
enum OrderType
{
TradeOrder,
LibraryOrder
}
Dictionary<OrderType, Type> _orderTypeMap = new Dictionary<OrderType, Type>
{
{ OrderType.LibraryOrder, typeof(LibraryOrder)},
{ OrderType.TradeOrder, typeof(TradeOrder)}
};
Order GetOrderInstance(OrderType orderType)
{
return Activator.CreateInstance(_orderTypeMap[orderType]) as Order;
}