如何在具有未知计数和类型参数的接口中声明方法

时间:2017-08-24 17:27:38

标签: c# methods arguments

我正在尝试像这样创建 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方法的接口 - ?

1 个答案:

答案 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)
    {
    }
}

依旧......