如何修改c#接口的版本

本文关键字:接口 版本 修改 何修改 | 更新日期: 2023-09-27 17:49:47

我有一个c#接口,IFoo,它可以在多个项目中由多方实现。我想做的是接口的版本,这样我就可以确定实现是根据哪个版本的接口开发的。

是否有首选/常规的方法来做这件事?我想过在接口规范中加入一个只读的InterfaceVersion属性,但这可以由实现者来定义,而不是由我作为接口的设计者来定义,所以这不是我想要的。

如何修改c#接口的版本

当你考虑到各种决策的全面影响时,这是一个非常复杂的话题。我已经开始在以下主题中记录这一过程:

可扩展应用程序中的程序集版本控制

本文档关注的是Visual Studio 2010及更新版本,它本身是一个可扩展的应用程序,到目前为止已经发布了多个版本。适当的扩展机制是MEF,但是它所施加的规则和限制仍然适用于其他扩展机制。

这个文档是一个正在进行的工作。建议和/或问题可以在问题跟踪器上报告。

通常不对接口进行版本化,因为它被认为是一个契约(契约应该被强制执行,而不是被破坏)。通常会创建一个具有新功能的新接口(可能是IFoo2),然后需要参与新合约的类将实现该接口。

public class Foo : IFoo, IFoo2 
{
    // Implementation goes here
}

,但这可以由实现者来定义,而不是由我这个设计师来定义这不是我想要的

这篇文章包含了你问题的答案。您想要的是只能由您(设计人员)定义的东西,因此它必须100%包含在您提供的程序集中。程序集包含类型,因此this something必须是一个类型。

显然,您不能在交付后更改任何接口(这会破坏所有客户机的代码),因此剩下的唯一选择是定义一个新接口。然后,实现者可以通过选择实现它来选择加入新版本。