如何在不破坏客户端的情况下在C#中的接口中为方法添加参数?

Ray*_*Ray -1 c# interface

我在C#应用程序中编写了一个公共接口,它具有以下方法:

IMimic OpenMimic(string mimicPath, string frameModel, string branch, int regionId);
Run Code Online (Sandbox Code Playgroud)

我还编写了一个实现此接口的抽象基类,同时,我编写了一个实现此基类的公共密封类.

现在,我需要为此方法添加一个参数,如下所示:

IMimic OpenMimic(string mimicPath, string frameModel, string branch, int regionId, IAlsContext mimicContext);
Run Code Online (Sandbox Code Playgroud)

这意味着我需要对我的基类和密封实现进行更改.

现在,有一些客户端应用程序(由我组织中的其他团队编写)使用此类并调用此方法的旧版本.如果我改变这个方法,我也被迫改变界面.

这不会打破客户吗?这是一个典型的突破性变化的例子吗?我该如何修复它以便客户不会破坏?问题是这个新参数是必需的参数,我不是接口编程的专家.

谢谢,

Eri*_*ert 6

这不会打破客户吗?

是的.

这是一个典型的突破性变化的例子吗?

是的.

我该如何修复它以便客户不会破坏?

您永远不会改变客户端所依赖的公共接口.

编写一个新接口 - 可能是扩展旧接口的接口 - 并使用具有正确签名的新方法.

然后实现您的类以实现新旧接口.您可能必须使用显式接口方法来执行此操作.

客户继续工作; 他们可以选择按计划移动到新界面.

你也可以考虑在标记老界面"过时" 下一个版本,然后将其删除版本说.

问题是这个新参数是必需的参数,我不是接口编程的专家.

那么,现在你比昨天更了解界面编程!

  • 埃里克解释了如何避免破坏变化,但你不得不避免它们.只要您和您的客户同意此更改,您就可以自行决定如何处理此更改. (2认同)