c# - 更改通用参数的名称是一项重大更改

标签 c#

更新库时,准确传达任何重大更改非常重要。不幸的是,C# 中有许多不同类型的重大更改,其中一些非常微妙。

最明显的是更改类型或类型成员的名称。

微妙的是像adding a new default parameter这样的东西(二进制兼容性被破坏,但源兼容性被保留),或 renaming a parameter (保持了二进制兼容性,但破坏了源代码兼容性)。

我不确定重命名通用参数。

例如,是否存在这样的情况:

public class Foo<T>
{
  public T Bar(){ /* something */ }
}

public class Foo<TMoreDescriptive>
{
  public TMoreDescriptive Bar(){ /* something */ }
}

库的发布之间可能会破坏消费者?

最佳答案

不,没有这种情况。

更改泛型类型参数的名称并不比更改方法参数的名称更具有破坏性。 According to the C# Programming Guide ,当消费者使用泛型类型参数实例化类时,泛型类型将被替换——除非通过文档或类似 IntelliSense 的功能,否则消费者绝不会给出原始类型参数的名称。

该指南还提到泛型类型参数可通过反射获得 - 这可能是您的消费者能够以编程方式检查名称更改的唯一向量,类似于方法参数。

关于c# - 更改通用参数的名称是一项重大更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58740817/

相关文章:

c# - 当我使用 x :bind in uwp: invalid binding path err 时出错

c# - 如何确定类型是否支持相等运算符

c# - 在 .Net 4.0 程序中运行 .Net 2.0 可执行文件

c# - C#中的字符串提取混淆

c# - 如何从控制台应用程序调用 REST API?

c# - 扩展方法不起作用(快速图形序列化)

c# - 显示模态对话框时淡化背景

c# - 如何解析 C# 程序集并提取每个方法

c# - 为什么 System.Design.dll 的引用还没有添加到 Visual Studio 中?

c# - 有没有办法可以延迟LINQ语句中的.Where子句?