【发布时间】:2016-04-08 17:13:18
【问题描述】:
我目前正在学习 C# 扩展方法。我在几个地方读到,将成员添加到类会降低使用这些类的代码的向后兼容性。
以及 Troelson 的 Pro C# 书籍的第 418 页。
恐怕这对我来说没有意义。当然,在添加额外成员之前使用这些类的实例的任何代码(不使用扩展方法,只需将它们添加到类中),仍然能够调用所有旧方法、属性、字段和构造函数,就像以前,因为他们没有改变。即使新成员可以改变对象的状态,也不会在旧代码中被调用,因此代码是向后兼容的。
我在这里没有看到什么?
【问题讨论】:
-
您看不到将类型的实例调用给定方法时运行的代码从一种实现更改为另一种实现可能会以某种方式影响该代码吗?
-
我不认为它改变了代码,而是添加到类中。显然,我可以看到摆弄其他类所依赖的代码是危险的。但是,添加一个方法重载将优先于某些参数的原始方法(可以在旧代码方法调用中使用),就像下面接受的答案一样,这是一个明确的例子,说明我没有可能出错想到了。
-
@GeorgeWooding,在我的回答中添加了第二个示例。
-
@GeorgeWooding 您不认为将您为程序编写的实现替换为由其他人编写的完全不同的实现,可能是出于完全不同的目的,这并没有改变程序?并且该答案中的示例与您链接的文章中描述的完全无关,该文章描述了它的行为。
-
@Servy,我相信第二个例子更相关,但如果我错了,请纠正我。
标签: c# oop extension-methods backwards-compatibility