根据我所了解的扩展方法,如果基类决定添加与您的扩展同名的方法,则会遇到问题。对于特定的类,通常不难选择一个名称以避免冲突,但是扩展方法可以添加到接口中,这使得潜在的冲突更加无限。
在Objective-C(使用它们的版本,类别),通过在每个方法之前添加前缀来避免此问题。我知道我们可以在命名空间中定义扩展方法,以便我们可以控制它们是否被导入,但这仅解决了扩展方法之间的冲突问题,而不是扩展方法与基类之间的冲突。
更新:
没有人实际提到过这一点,但扩展方法不是虚拟的。这意味着如果您在接口i上调用i.myExtension(),则它将始终调用接口类的方法,因此不会调用子类方法(可能具有不同的意图)。因此,总体而言,使用扩展方法是非常安全的。