具有不同参数的接口方法

时间:2014-03-14 12:00:22

标签: c# interface

我有一个界面:

public interface ICompleteable 
{
    public void Complete();
}

但是,我希望使用不同的参数扩展具有类的方法:

public class CompleteableClassA : ICompleteable 
{
    public void Complete(string name) { ... }
}

public class CompleteableClassB : ICompleteable
{
    public void Complete(string email, string password) { ... }
}

从具有不同参数的接口扩展方法有什么好方法(甚至更好,一种模式?)?

3 个答案:

答案 0 :(得分:4)

创建一个封装参数的类,并在需要时扩展该参数:

public class CompleteParameters
{
  string parm1;
  // whatever you want
};

public class CompleteParametersTwo : CompleteParameters
{
  string parm2;
};


public interface ICompleteable 
{
    public void Complete(CompleteParameters parms);
}

答案 1 :(得分:1)

您无法扩展不存在的内容。所以基本上你在这里做的只是为每种类型添加新方法,这些方法也按照定义从类型推迟到类型,因此你的界面中没有明显的常见模式。

您也可以考虑定义基类,例如:

public class Base {

   public void Complete(string name) { ... }
   public void Complete(string email, string password) { ... }
}

之后

public class CompleteableClassA : BaseClass, ICompleteable {
}

public class CompleteableClassB : BaseClass, ICompleteable {
}

在这种情况下,两个类共享相同的基类,因此也共享同一组Complete(..)方法的重载。

答案 2 :(得分:0)

如果您打算使用相同类型的参数,可以使用params

interface ICompleteable
{
    void Complete(params string[] parameters);
}

或者,对于不同的类型,您可以使用

interface ICompleteable
{
    void Complete(params object[] parameters);
}