Я пытаюсь создать дизайн для какого-то интерфейса IExecutable. Я не буду вдаваться в подробности, но дело в том, что у меня есть несколько действий, которые нужно выполнить из базового класса. Они могут принимать разные параметры (неважно), и они могут/не могут возвращать значение.Инкапсулирующее действие <T> и Func <T>?
До сих пор, это мой дизайн:
public abstract class ActionBase
{
// ... snip ...
}
public abstract class ActionWithResultBase<T>: ActionBase
{
public abstract T Execute();
}
public abstract class ActionWithoutResultBase: ActionBase
{
public abstract void Execute();
}
До сих пор, каждый из моих конкретных действий должен быть ребенком или от ActionWithResultBase или ActionWithoutResult базы, но я на самом деле не так. Если бы я мог переместить определение Execute в ActionBase, считая, что конкретный класс может вернуть или не вернуть значение, я достиг бы своей цели.
Кто-то сказал мне, что это можно сделать с использованием Func и Action, для которых я полностью согласен, но я не могу найти способ иметь это в одном классе, чтобы вызывающий мог знать, будет ли действие для возврата значения или нет.
Коротко: Я хочу сделать что-то вроде:
// Action1.Execute() returns something.
var a = new Action1();
var result = a.Execute();
// Action2.Execute() returns nothing.
var b = new Action2();
b.Execute();
В качестве пояснения: моя цель состоит в том, чтобы иметь абстрактное выполнение в ActionBase и избегать создания ActionWithResultBase и ActionWithoutResultBase. – Alpha 2010-11-25 17:04:34