gpt4 book ai didi

c# - 将公共(public)方法添加到公共(public)类是一个重大变化吗?

转载 作者:行者123 更新时间:2023-11-30 18:50:23 26 4
gpt4 key购买 nike

例如只有一个Age方法的Person:

public class Person
{
public int Age()
{
return 6;
}
}

添加了一个Height()方法。

public class Person
{
public int Age()
{
return 6;
}
public int Height()
{
return 6;
}
}

这是一个重大变化吗?注意Person没有被密封。

最佳答案

tl;dr;

Eric Lippert 又是对的..

感谢 Tim Schmelter 的评论以及指向 Eric Lippert 的 blog post 的链接,我已经改变了我原来的答案。

向现有类添加公共(public)方法或属性可能是一项重大更改。可能不是,但可能是!

较长的版本

重大更改意味着您正在更改您的类型的公共(public) API,使得使用当前 API 的现有代码将不再能够编译。

明显的破坏性更改是删除公共(public)成员,或以无法再编译使用您的类的代码的方式更改它们。此类更改可能是(部分列表!):

  • 向现有方法添加非可选参数。*
  • 将现有方法的参数的数据类型更改为不是原始参数基类型的数据类型
  • 将属性的数据类型更改为不是从原始数据类型派生的数据类型
  • 将方法的返回类型更改为不是从原始类型派生的类型

正如 Eric 所展示的,即使添加一个新的公共(public)方法也可能是一个破坏性的变化,就像他在博客中提到的破坏性重载一样,将属性或参数的类型更改为更具体的类型也是如此(意思是从原始类型派生)也可能是一个突破性的变化,原因完全相同。

但是,Eric 还指出,此类情况非常具体且不太可能发生,因此可以安全地假设您不会遇到它们。

This particular "flavour" of breaking change is an odd one in that it makes almost every possible change to the surface area of a type into a potential breaking change, while at the same time being such an obviously contrived and unlikely scenario that no "real world" developers are likely to run into it.


*虽然我们讨论的是重大更改,但更改可选参数的默认值也是一个潜在的重大更改 - 因为可选参数的工作方式是将默认值注入(inject)调用方法,作为传递给具有可选参数。更改默认值意味着您必须重新编译使用该方法的所有内容。

关于c# - 将公共(public)方法添加到公共(public)类是一个重大变化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49170904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com