接口中的可选方法

时间:2011-03-29 16:35:20

标签: .net interface

我需要更改多个应用使用的界面。只有我正在处理的这个应用程序才需要进行更改。我需要在方法中添加一些参数。

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

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

这里最好的做法是什么,朋友?

3 个答案:

答案 0 :(得分:4)

您可以添加实现旧接口的新接口(即INewInterface)(即IOldInterface)。然后,然后将INewInterface实现到类/ struct。

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 ) { ... }
}

答案 1 :(得分:3)

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

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

目前还不完全清楚是什么实现了界面或者我正在使用它的是什么,所以提出非常具体的建议有点困难。

答案 2 :(得分:1)

如果您控制所有代码,那么修改界面可能是合理且简单的。

但是,这种变化可能会引入额外的成本,而不仅仅是初始编码时间。

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