我有一个界面:
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) { ... }
}
从具有不同参数的接口扩展方法有什么好方法(甚至更好,一种模式?)?
答案 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);
}