ある種の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を使用して行うことができると私に言いましたが、私は完全に同意しますが、アクションが値を返すかどうかを発信者が知ることができるように、それを1つのクラスにまとめる方法を見つけることができません。いいえ。
簡単な説明:次のようなことをしたい:
// Action1.Execute() returns something.
var a = new Action1();
var result = a.Execute();
// Action2.Execute() returns nothing.
var b = new Action2();
b.Execute();