と工場での委任辞書パターンの使い方:私は現在、このようになりますファクトリクラスを持つパラメータ
public static class OrderFactory
{
public static Order GetOrder(OrderInformation orderInfo, Logger logger, string overlayPath)
{
switch (orderInfo.Type)
{
case OrderType.Print:
return new Print(orderInfo, logger, overlayPath);
case OrderType.Cad:
return new Cad(orderInfo, logger, overlayPath);
case OrderType.Litho:
return new Litho(orderInfo, logger, overlayPath);
case OrderType.Error:
default:
return new OrderError(orderInfo, logger, overlayPath);
}
}
}
public abstract class Order
{
protected OrderInformation OrderInfo { get; set; }
protected Logger Logger { get; set; }
protected string OverlayPath { get; set; }
public Order(OrderInformation orderInfo, Logger logger, string overlayPath)
{
OrderInfo = orderInfo;
Logger = logger;
OverlayPath = overlayPath;
}
public abstract Task<bool> CreateImage()
}
public class Print : Order
{
public Print(OrderInformation orderInfo, Logger logger, string overlayPath)
: base(orderInfo, logger, overlayPath)
{ }
public override async Task<bool> CreateThumbs(CorelAppWrapper corelAppWrapper, int timeBeforeFirstAbort, int timeBeforeRetryAbort)
{
私はswitch文を使用しないように、主にデリゲートパターンまたは何か他のものを使用したいとも知っているだろうある日、この方法をすばやく拡張する必要があります。 Delegate Dictionary Patternなどを使用したいそれはこの方法がPrint
タイプがOrder
型に変換することができないというエラーがスローされます行う
private delegate Order Order(OrderInformation orderInfo, Logger logger, string overlayPath);
private static readonly Dictionary<OrderType, Order>
mTypeConstructors = new Dictionary<OrderType, Order>
{
{ OrderType.Print, (orderInfo, logger, overlayPath) => new Print(orderInfo, logger, overlayPath) },
...//etc
};
:私はこのようなコードを試してみました。これを回避するには何ができますか?
をオブジェクトの作成を移動しましたか? – Diosjenin
@Diosjenin - いいえ、ScreenPrintは印刷する必要があります。私はそれを修正した。良いキャッチ。 –
@BenHoffman、 'Transfer'型と' Order'-hierarchyの型の定義を投稿してください。 –