C# 功能实现
我有一个名为Task的基类,如下所示:C# 功能实现,c#,function,inheritance,overriding,C#,Function,Inheritance,Overriding,我有一个名为Task的基类,如下所示: public class Task{ List<Task> subTasks = new List<Task>(); public T executeTask<T>(){ foreach(Task tsk in subTasks){ tsk.executeTask(); } } } 公共类任务{ 列表子任务=新建列表(); 公共T执行任
public class Task{
List<Task> subTasks = new List<Task>();
public T executeTask<T>(){
foreach(Task tsk in subTasks){
tsk.executeTask();
}
}
}
公共类任务{
列表子任务=新建列表();
公共T执行任务(){
foreach(子任务中的任务tsk){
tsk.executeTask();
}
}
}
然后我还有几个其他任务,它们继承自Task类,比如TaskA、TaskB等等。它们都应该有自己的executeTask实现
我面临的问题是,一些任务正在进行计算,一些任务正在执行字符串操作,例如返回操作的结果,这意味着返回类型必须是灵活的,或者至少不需要大量的转换
有没有人对如何实现这一点有一个好的、清晰的想法?。与继承方法“签名”应相同
您可以引入通用返回类型,然后将其用于方法的签名
public class Result
{
public object Value {get; set;}
}
public interface IYourTask
{
Result Execute();
}
public class StringManipulationTask
{
public Result Execute()
{
// do something
return new Result("resultofManipulation");
}
}
public class NoReturnDataTask
{
public Result Execute()
{
// do something
return new Result(); // with no data - "empty result"
}
}
根据“结果”的行为,您可以将result
作为抽象引入,并为不同的行为提供自己的实现
摘要-对于以相同的“常规”方式使用所有任务,您应该以相同的格式/签名包装所有任务。如果您不确定Steve为什么写评论,那么将类命名为Task(您确定您没有重新发明轮子吗?)不是一个非常好的主意,这里引用了一个类,该类在C#处理异步执行的方式中起着核心作用:。不,name任务只是一个示例。这实际上是另一个类,它有更多的内容,这不会影响问题在哪一点上施法量对你来说变得巨大?当我使用的施法量超过实际的“任务”时,好的,我忘了说一些不返回结果,我的错。@Curunir,如果任务不返回,你可以返回“空”结果