Инкапсуляция Action и Func ?

Я пытаюсь создать дизайн для какого-то интерфейса IExecutable. Я не буду вдаваться в подробности, но дело в том, что у меня есть несколько действий, которые необходимо выполнить из базового класса. Они могут принимать разные параметры (ничего страшного), и они могут возвращать / не возвращать значение.

Пока что это мой дизайн:

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();
11
задан Alpha 25 November 2010 в 17:15
поделиться