C# 向前兼容的扩展方法

C# 向前兼容的扩展方法,c#,extension-methods,future-proof,C#,Extension Methods,Future Proof,使用扩展方法,我们可以轻松地向任何类型添加方法。显然,这为将来的.net版本中不再调用扩展方法提供了可能性(例如,该类型现在包含一个与扩展方法具有相同签名的方法) 这应该引起关注吗 如果是这样,我应该如何处理这一问题,并设计扩展方法,以便在出现这种情况时尽量减少代码更改?使用框架中永远不会使用的模糊方法名称 编辑——也许晦涩不是最合适的词,请用有意义但不太常见的措辞代替 尝试避免签名冲突实际上是避免代码返工麻烦的唯一策略(假设需要保留扩展方法的功能,而不是简单地转换为框架的方法定义).恐怕您唯一

使用扩展方法,我们可以轻松地向任何类型添加方法。显然,这为将来的.net版本中不再调用扩展方法提供了可能性(例如,该类型现在包含一个与扩展方法具有相同签名的方法)

这应该引起关注吗


如果是这样,我应该如何处理这一问题,并设计扩展方法,以便在出现这种情况时尽量减少代码更改?

使用框架中永远不会使用的模糊方法名称

编辑——也许晦涩不是最合适的词,请用有意义但不太常见的措辞代替


尝试避免签名冲突实际上是避免代码返工麻烦的唯一策略(假设需要保留扩展方法的功能,而不是简单地转换为框架的方法定义).

恐怕您唯一能做的就是为扩展方法提供足够唯一的名称,这样您就可以100%确定永远不会发生冲突


不要说在方法名称中添加cat的名称,只要试着更具创造性:)

如果框架在将来发生如此大的变化,那么总会有兼容性问题。如果添加了与扩展方法同名的新框架方法,则它们很可能具有相同的功能,或者至少具有非常相似的功能,并且无论如何都要进行重构


我认为扩展方法的威力太大,不能仅仅因为这种风险而忽视。

我同意。让你的扩展方法尽可能清晰、明显和直接。同意,它们应该是有意义的,但我不认为有意义和模糊需要相互排斥。拿出同义词表,使用不太常见但明显的动词。如果你非常担心,你可以添加前缀,比如ext_redefinite,而不是redefinite。如果你担心这一点,一个解决方案就是不要使用扩展方法<代码>;)您可以从正在扩展的类继承并以这种方式添加方法。您将收到以下警告:您正在隐藏稍后添加的新方法。或者您可以从静态方法中删除
这个
参数修饰符。