根据我读到的有关扩展方法的内容,如果基类决定添加与扩展名相同的方法,则会遇到问题.对于特定的类,通常不难选择名称以避免冲突,但是可以向接口添加扩展方法,这会增加冲突的无限可能性.
在Objective-C(及其版本,类别)中,通过在每个方法之前添加前缀来避免此问题.我知道我们可以在命名空间中定义扩展方法,以便我们可以控制它们是否被导入,但这只能解决扩展方法之间的冲突问题,而不是扩展方法和基类之间的冲突.
更新:
实际上没有人提到这一点,但扩展方法并不是虚拟的.这意味着如果你可以在接口i上使用i.myExtension(),那么它将始终调用接口类方法,因此不会调用子类方法(可能具有不同的意图).因此,总的来说,使用扩展方法是非常安全的.
使用前缀会使代码变得丑陋,从而消除了扩展方法的一些价值.
我建议相反,小心不要创建大量的扩展方法并使用有意义的方法名称.这样,在冲突的情况下,更有可能的是,例如,扩展Where方法和冲突Where方法将具有类似的语义.
常见的约定是将它们放在各自独立的命名空间中(通常以其形式<something>.Extensions),然后您可以使用它来决定是否在包含扩展通常操作类型的任何特定代码段中使用它们.
此外,如果确实存在冲突,请记住扩展方法仍然是静态方法,因此在名称冲突的情况下,您始终可以显式调用它们.
但是,如果您发现经常遇到名称冲突,则可能需要重新考虑所选的名称,以便它们不会干扰该类型上已存在的名称.
总而言之,不,您不应该在C#中添加扩展方法名称的前缀,因为它们只会混淆您的代码并使其难以维护.
如果基类实现了一个与扩展名相同的方法,我猜你会有以下两种情况之一:
| 归档时间: |
|
| 查看次数: |
543 次 |
| 最近记录: |