Ray*_*ond 15 .net c# methods interface
我正在尝试创建一个公共类的接口,但实现类可以有不同的参数.
例如
public interface IViewModel
{
//...
void ResetReferences();
}
// and then, in my class implementations, something like this:
public class LocationViewModel : IViewModel
{
public void ResetReferences(List<StateProvinces> stateProvinces) //...
}
public class ProductViewModel : IViewModel
{
public void ResetReferences(List<Color> colors, List<Size> sizes) //...
}
Run Code Online (Sandbox Code Playgroud)
所以请注意我想要标准化"RestReferences"命名约定.我很确定我不能这样做,但是有没有可行的设计模式?例如在我的界面中,如下所示?
// variable parameters
void ResetReferences(params object[] list);
Run Code Online (Sandbox Code Playgroud)
但是,我如何让我进行类型检查或让它调用我想要的实际方法签名等?
也许界面是错误的使用?也许只是一个基类和一些编码约定?
谢谢,
Jef*_*hol 23
用实现相关接口的对象替换args列表:
public interface IViewModel
{
//...
void ResetReferences(IResetValues vals);
}
Run Code Online (Sandbox Code Playgroud)
我应该补充一点,IMO,"ResetReferences()"不应该参数...它应该重置为某个默认值,该默认值将特定于实现您的接口的各个类型..."重置"是这意味着,对我来说,"恢复到初始状态"...添加args意味着你可以控制它.
And*_*bel 17
接口的目的是让客户端代码了解接口并忽略实现.如果您的实现在调用时需要特殊处理,则客户端代码需要知道它调用的实现,然后接口的整个目的都将丢失.
除非我完全误解了你想要完成的事情,否则你就走错了路.
Jon*_*eet 15
如果参数可以不同,那么它实际上不是一个通用接口.这样说:调用者是否需要知道实现类?如果是这样,您就失去了接口的松耦合优势.
一种选择是将参数封装到另一种类型中,并使该类在该类型上通用.例如:
public interface IViewModel<T>
{
void ResetReferences(T data);
}
Run Code Online (Sandbox Code Playgroud)
然后你将它封装List<Color> colors, List<Size> sizes成一种类型,并可能放入List<StateProvinces> stateProvinces另一种类型.
虽然有点尴尬......
| 归档时间: |
|
| 查看次数: |
21358 次 |
| 最近记录: |