.net 接口中的可选方法

.net 接口中的可选方法,.net,interface,.net,Interface,我需要更改由多个应用程序使用的界面。只有我正在使用的这个应用程序才需要更改。我需要向该方法添加更多的参数 我有权更改其他应用程序中的代码,只需几分钟即可更改其他应用程序以使用正确的方法签名。然后,我可以让这些应用程序对这些额外的参数不做任何事情 或者我可以创建一个重载,让其他应用程序实现这些方法,而我猜什么也不做。或者让他们在没有额外参数的情况下调用原始方法 朋友们,这里的最佳实践是什么?您可以添加新接口(即INewInterface),实现旧接口(即IOldInterface)。然后实现类/结

我需要更改由多个应用程序使用的界面。只有我正在使用的这个应用程序才需要更改。我需要向该方法添加更多的参数

我有权更改其他应用程序中的代码,只需几分钟即可更改其他应用程序以使用正确的方法签名。然后,我可以让这些应用程序对这些额外的参数不做任何事情

或者我可以创建一个重载,让其他应用程序实现这些方法,而我猜什么也不做。或者让他们在没有额外参数的情况下调用原始方法

朋友们,这里的最佳实践是什么?

您可以添加新接口(即INewInterface),实现旧接口(即IOldInterface)。然后实现类/结构的INEWERFACE

public interface IOldInterface {
    object DoSomething( int number );
}
...
public interface INewInterface : IOldInterface {
    object DoSomething( int number, TimeSpan time );
}
...
public class MyClass : IOldInterface, INewInterface {
    public object DoSomething( int number ) { ... }
    public object DoSomething( int number, TimeSpan time ) { ... }
}

如果您控制所有代码,那么仅修改接口可能是合理和最简单的

然而,这种变化可能会带来超出初始编码时间的额外成本


有时,另一种选择是引入一个新的接口来扩展第一个接口(仅由新代码使用),以避免在其他地方引入额外的成本和风险。

我会尽量避免创建不真正“适合”所有合理实现的方法。有两种选择:

  • 考虑将参数封装在单独的类型中;这往往使他们更灵活
  • 考虑使用新接口扩展现有接口,并在需要它的应用程序中实现它

恐怕还不完全清楚是什么实现了这个接口,或者是什么在使用它,所以很难给出非常具体的建议。

“应该”太强了。这是一种选择。这通常是一个好的选择,但并不总是最好的。@Andy Thomas Crammer:好吧,它可能太强了。“can”可能是更好的词。