Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 功能实现_C#_Function_Inheritance_Overriding - Fatal编程技术网

C# 功能实现

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执行任

我有一个名为Task的基类,如下所示:

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,如果任务不返回,你可以返回“空”结果