【问题标题】:C# class backward compatibilityC# 类向后兼容性
【发布时间】:2018-10-05 15:03:07
【问题描述】:

我有一个被一些项目内部使用的 NuGet 包。现在,在重构项目时,我发现了几个命名不当的类。我想知道 C# 中是否有任何方法可以更改类名而不破坏任何内容。

【问题讨论】:

  • 增加包的主要版本号并记录重大更改。这就是你所能做的。
  • 提供两个名称,弃用旧名称,并在几个主要版本后删除旧名称。
  • @Zereges 应该将其发布为答案:)
  • @Zereges - 我不明白这会如何工作。您必须更改使用这些类型作为参数的所有面向公众的接口,并添加复制功能以在类型之间复制状态。根据正在发生的变化,这可能是一个真正的 PITA。下面是一个简单的例子:void Update(Kustomer userInfo)Kustomer 现在应该是 Customer,这意味着添加一个新类型,但在它使用的任何地方包括一个新方法,包括内部......
  • @Igor 在这种情况下提供using Kustomer = Customer 别名是否有效?

标签: c# backwards-compatibility


【解决方案1】:

如果不破坏其他人的代码,就无法重命名标识符。您可以做的最好的事情是留下clAssNaME 标识符,提供新的ClassName 并将clAssNaME 标记为已弃用。发布带有记录和突出显示的更改日志的新版本。

如果您有足够的信心让大多数人修复他们的代码,请删除clAssNaME

【讨论】:

    【解决方案2】:

    您执行的操作取决于更改的程度。如果更改名称的类型不是简单类型(即有很多行为)或在整个包中使用,则创建该类型的副本可能非常困难,因为您还必须确保代码可以使用任何一种类型(反正有一段时间)。

    一个更简单的解决方案可能是分支您的包并在新分支中增加主要版本号。在“新”分支中:更新类型名称,记录重大更改,并将发布作为新版本推送。然后,您可以维护两个分支,直到您认为适合停止“较旧”分支上的工作。在“旧”分支中,您还可以将类型标记为已弃用,并警告在未来版本中它们将具有更改名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多