ジェネリック型またはメソッド パラメーターがある可能性があることを意味する場合は、次のようにすることができます。
public class A<T> where T : ITask, new()
{
public void Some()
{
T instanceOfITask = new T();
}
}
...また:
public class A
{
public void Some<T>() where T : ITask, new()
{
T instanceOfITask = new T();
}
}
ジェネリック制約を使用すると、T
実装するITask
必要があり、パラメーターなしのパブリック コンストラクターを持たなければならないことを指定できます。
アップデート
OPが質問を編集したため、私の現在の回答が時代遅れになった可能性があります。
ところで、あなたの実際の要件がわからないので、このソリューションを引き続き使用できると主張できます。
ITaskのインスタンスを処理する必要があるメソッド内でif some 条件を実行する代わりに、呼び出し元で実行し、一般的な制約を再度利用して、リフレクションとそのパフォーマンスの低下を回避できます。
結局のところ、これは抽象ファクトリ パターンを使用しています。
// The abstract factory!
public static class TaskFactory
{
public static T Create<T>() where T : ITask, new()
{
T instanceOfITask = new T();
// more stuff like initializing default values for the newly-created specific task
return instanceOfITask;
}
}
後で、どこか:
ITask task = null;
// Depending on the condition, you invoke the factory method with different implementation of ITask
if([some condition])
{
task = TaskFactory.Create<MySpecificTaskImplementationA>();
}
else
{
task = TaskFactory.Create<MySpecificTaskImplementationB>();
}