列挙型が与えられた場合:
public enum Work
{
Normal,
Extended
}
私がやりたいのは次のとおりです。
public abstract class Builder<T>
{
public static Builder<T> GetBuilder<T> (T work)
{
return new Builder<T> ();
}
}
public class BuilderNormal : Builder<Work.Normal>
{
}
public class BuilderExtended : Builder<Work.Extended>
{
}
特に、Builderでスイッチ/ケースを使用したり、Workに新しい列挙値を追加するときに維持する必要があるマッピングを使用したりすることは避けたいです。つまり、これを行うことができます。
public abstract class Builder
{
public static Builder GetBuilder (Work work)
{
switch (work)
{
case Work.Normal:
return new BuilderNormal ();
case Work.Extended:
return new BuilderExtended ();
default:
throw new ...
}
}
}
したがって、基本的には、列挙値に応じてクラスのインスタンスを作成する必要があり、クラスは抽象クラスの子クラスである必要があります。