gpt4 book ai didi

c# - 如何解决我的扩展库中的扩展方法歧义错误?

转载 作者:行者123 更新时间:2023-12-01 11:10:57 25 4
gpt4 key购买 nike

可以说我有一个扩展方法。

public static string DoSomething(this IInterfaceA @this) ...


public static string DoSomething(this IInterfaceB @this) ...

但是如果我有一个实现这两个接口(interface)的类,对于扩展库,是否可以指示它应该更喜欢哪一个?

最佳答案

简短的回答 - 不,这是不可能的。

长答案:
扩展方法只是一个接受参数并包含关键字 this 的静态方法。 . Intellisense 扫描代码以查找所有扩展方法,并为我们提供语法糖,允许在类的实例上调用它们,就像普通方法一样。

另一方面,接口(interface)描述对象行为,并用于按对象的行为对对象进行分组和分离/隔离:

IBird { void Fly(); }
IBug { void Crawl(); }

class Parrot : IBird {}
class Ant : IBug {}

如果我们有类似的东西:
IGlidingBird { void Fly(); }  // and
IFlappingBird { void Fly(); }

那么很可能我们的设计很糟糕,因为作为虚拟方法容器的接口(interface)不应该对它的实际实现一无所知。

在示例代码中,您将看到一个编译时错误:'The call is ambiguous between the following methods...'。

虽然您可以将对象转换为其中一种接口(interface)类型,以让编译器知道要使用哪些方法:
((IInterfaceA)instance).DoSomething()
((IInterfaceB)instance).DoSomething()

现在可能是停下来思考是否有可能改变设计并完全避免这个问题的好时机。

关于c# - 如何解决我的扩展库中的扩展方法歧义错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60631920/

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