2017-05-01 7 views
-1

나는 다음과 같다 작업이라는 기본 클래스가 있습니다기능 구현

public class Task{ 
    List<Task> subTasks = new List<Task>(); 
    public T executeTask<T>(){ 
     foreach(Task tsk in subTasks){ 
      tsk.executeTask(); 
     } 
    } 
} 

을 그리고 나는 등 TaskA, TaskB과 같은 작업 클래스에서 상속 여러 가지 다른 작업을해야합니다. 그들은 모두 executeTask를 자체적으로 구현해야합니다.

내가 직면하는 문제는 작업 중 일부가 계산을 수행하고 일부는 문자열 연산을 수행하고 연산 결과를 반환한다는 것입니다. 즉, 반환 유형이 유연해야하거나 최소한 연산이 필요하지 않습니다. 엄청난 양의 주조.

아무에게도이 기능을 구현하는 방법에 대한 좋은 아이디어가 있습니까?

+8

Task라는 클래스를 사용하는 것은 그리 훌륭한 생각이 아닙니다. (바퀴 작업을 다시 개척하지 않아도 될까요?) [Class Task] (https://msdn.microsoft.com/en-us/library/system. – Steve

+5

Steve가 자신의 의견을 쓴 이유를 모르겠다면 C#에서 비동기 실행을 처리하는 방법에서 중심 역할을하는 클래스에 대한 참조가 있습니다. [' 작업'] (https://msdn.microsoft.com/en-us/library/system.threading.tasks.task%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396). – dasblinkenlight

+0

이름이 없습니다. 예를 들어 Task가 하나의 예입니다. 그것은 문제에 영향을 미치지 않는 더 많은 것들을 가진 또 다른 클래스입니다. – Curunir

답변

0

.. 반환 유형이 유연해야합니다. - 상속이 도움이되지 않는다는 것을 의미합니다. 상속 방법에서는 "서명"이 동일해야합니다.

일반 반환 유형을 소개 한 다음 메서드 서명에 사용할 수 있습니다.

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을 소개하고 다른 행동에 대한 자신의 구현을 가질 수 있습니다.

요약 - 동일한 "일반"방식으로 모든 작업을 사용하는 경우 동일한 형식/서명으로 모든 작업을 래핑해야합니다.

+0

좋아, 일부는 결과를 반환하지 않는다는 것을 잊어 버렸습니다. – Curunir

+0

@Curunir, 작업이 반환되지 않을 경우 "비어있는"결과를 반환 할 수 있습니다. – Fabio