길게 : Tasks
및 Handlers
이되는 시스템에서 작업하고 있습니다. 작업은 시스템의 다른 부분에서 처리기로 보내지며 결국 처리기가 값을 반환합니다.C# Generics - 일반 메서드 사용에서 일반 형식 결정
우리는 느슨한 유형의 시스템을 가지고 있으며 험악한 혼란으로 변했습니다. (문제는 작업 개시자가 종종 제 3 자 구성 요소에서 발생한다는 사실에 의해 크게 증폭됩니다. 본질적으로 플러그인 임).
나는 강하게 입력 된 방식으로이를 구현하는 방법을 생각해 왔으며, 단지 이것을 obsurdity의 요점으로 생각할 수도 있지만, 은과 비슷합니다. 문제는 몇 가지 구문입니다. 당신이 볼 수 있듯이 ITask
제네릭,
interface ITask<ReturnType> { }
interface ITaskHandler<TaskType, TaskReturnType> where TaskType : ITask<TaskReturnType>
{
TaskReturnType PerformTask(TaskType task);
}
및 ITask
에 대한 선언 일반 매개 변수는 ITaskHandler<ITask>
의 리턴 타입 :
는 여기에 내가 (명확성을 위해 확장 일반적인 이름)를 가지고거야. 즉, 각 TaskHandler
은 계약 상으로는 ITask
으로 지정된 유형을 반환하도록 바인딩됩니다. TaskHandlers를 선언하는 것은 일부 매우 추한 서명에 이르게
큰 단점 ...
class SpecificTask : ITask<Dictionary<Type,Delegate>>
{
}
class SpecificHandler : ITaskHandler<SpecificTask, Dictionary<Type, Delegate>>
{
public Dictionary<Type, Delegate> PerformTask(SpecificTask task)
{
return new Dictionary<Type, Delegate>();
}
}
내 질문은 : SpecificTask
은 이미 일반적인 매개 변수로 returnType이있어 제공하고 있기 때문에, SpecificHandler
의 서명이 단축 될 수있다 이상과 같은 :
interface ITaskHandler<TaskType> where TaskType : ITask
{
// pulling TaskReturnType out of thin air...
TaskReturnType PerformTask(TaskType task);
}
class SpecificHandler : ITaskHandler<SpecificTask>
{
public Dictionary<Type, Delegate> PerformTask(SpecificTask task)
{
return new Dictionary<Type, Delegate>();
}
}
... 그리고, 어떻게 유형이 SpecificTask
에 포함되어 PerformTask
의 반환 유형을 선언 할 그렇다면?
아마도 두려워 할 수도 있습니다 ... 제가 인식하지 못했던 몇 가지 구문일지도 모르기를 바랬습니다. – STW