我正在尝试像这样创建 interface
:
public interface IProcessable<out T>
{
T Result { get; }
T Execute(params object[] args);
}
我想要一个Execute()
方法返回T
并且能够接受任何类型的参数。
我希望像这样使用它:
public class CustomProcess: IProcessable<int>
{
public int Result { get; private set; }
public int Execute(string customArg)
{
/// some codes to return int
}
}
IProcessable<int>
会强制我添加Execute
这样的方法:
public int Execute(params object[] args)
{
var customArg= args[0] as string;
if (customArg!= null) //I know that this is not so necessary for `string`
{
return Execute(customArg);
}
throw new Exception();
}
我认为,我应该在CustomProcess
中使用这两种方法,因为object[]
的范围可以接受。
知道我应该问:
这种界面是可接受的还是一种反模式?
有没有更好的方法来实现我想要的 - 创建一个强制类具有Result
属性和Execute
方法的接口 - ?
答案 0 :(得分:0)
正如@Servy评论的那样,以及正确的签名;我找到了这样的解决方案:
public interface IProcessInput
{
}
public interface IProcessable<in TInput, out TOutput> where TInput : IProcessInput
{
TOutput Result { get; }
TOutput Execute(TInput args);
}
public abstract class ProcessInput: IProcessInput
{
protected ProcessInput(int count)
{
Count = count;
}
public virtual int Count { get; private set; }
}
public class WithoutProcessInput : ProcessInput
{
public WithoutProcessInput() : base(0)
{
}
}
依旧......