gpt4 book ai didi

c# - 通过扩展方法给 IFoo.Foo() 一个实现

转载 作者:行者123 更新时间:2023-11-30 13:46:17 27 4
gpt4 key购买 nike

我遇到了以下代码:

public interface IFoo { }

通过扩展方法让 IFoo 做一些事情:

public static FooExtensions 
{
public static string Foo(this IFoo foo, string bar)
{
// Do work
return bar;
}
}

这是个好主意吗?为什么不使用带有虚拟 Foo() 的抽象类呢? IFoo 可以有一些契约方法,但消费者也可以获得 Foo() 扩展方法。

我的问题是:什么时候这样的想法是个好主意?

最佳答案

扩展方法不会“让”IFoo 做任何事情。扩展方法只是让您扩展一个封闭的类型...它通常最好与您无法修改的代码结合使用,例如框架类型或第三方类型。

另一种可能性是,如果您有很多逻辑在接口(interface)的所有实现中都完全相同,并且您希望接口(interface)的使用者无需使用基类型即可访问该功能。想想 LINQ——它是通过扩展方法实现的,您只需实现 IEnumerable 即可获得它的所有好处。

在这种情况下,除了不必要的间接层外,您什么也得不到。如果 IFoo 应该有能力执行 Foo,请将 Foo 添加到接口(interface)中。

关于c# - 通过扩展方法给 IFoo.Foo() 一个实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377875/

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