如何使用可变参数/不同方法签名创建方法接口?

我正在尝试创建一个公共类的接口,但实现类可以有不同的参数。

例如

public interface IViewModel { //... void ResetReferences(); } // and then, in my class implementations, something like this: public class LocationViewModel : IViewModel { public void ResetReferences(List stateProvinces) //... } public class ProductViewModel : IViewModel { public void ResetReferences(List colors, List sizes) //... } 

所以请注意我想要标准化“RestReferences”命名约定。 我很确定我不能这样做,但是有没有可行的设计模式? 例如在我的界面中,如下所示?

 // variable parameters void ResetReferences(params object[] list); 

但是,如何让我进行类型检查或让它调用我想要的实际方法签名等?

也许界面是错误的使用? 也许只是一个基类和一些编码约定?

谢谢,

用实现相关接口的对象替换args列表:

 public interface IViewModel { //... void ResetReferences(IResetValues vals); } 

我应该补充一点,IMO,“ResetReferences()”不应该参数…它应该重置为某个默认值,该默认值将特定于实现您的接口的各个类型…“重置”是这意味着,对我来说,“恢复到初始状态”…添加args意味着你可以控制它。

接口的目的是让客户端代码了解接口并忽略实现。 如果您的实现在调用时需要特殊处理,则客户端代码需要知道它调用的实现,然后接口的整个目的都将丢失。

除非我完全误解了你想要完成的事情,否则你就走错了路。

如果参数可以不同,那么它实际上不是一个通用接口。 这样说: 调用者是否需要知道实现类? 如果是这样,您就失去了接口的松耦合优势。

一种选择是将参数封装到另一种类型中,并使该类在该类型上通用。 例如:

 public interface IViewModel { void ResetReferences(T data); } 

然后,您将List colors, List sizes封装为一种类型,并可能将List stateProvinces放入另一种类型中。

虽然有点尴尬……

您将需要实现接口方法,但您仍然可以执行所需的操作

 public class LocationViewModel : IViewModel { public void ResetReferences(List stateProvinces) // ... void IViewModel.ResetReferences() // ... } 

您必须在接口中具有这两种方法(并且具有不正确的实例抛出不支持的exception),或者让接口从其他两个接口inheritance到相同的效果。

接口定义是整个签名。

也可以将对象作为参数传递(可能从ParameterProvider基类派生),以便对象封装动态特性并仍然允许接口是静态的。 但那就是说,无论如何,你基本上都在使用类型系统。