我正在尝试设计某种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();