如果你的意思是你可能有一个泛型类型或方法参数,你可以这样做:
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>();
}