c# - 我们可以用具有扩展方法的接口(interface)替换抽象类吗?

标签 c#

我们即将从头开始一个项目。根据设计讨论,我正在考虑提出这个主题。

大多数时候,我看到抽象类只是用来通过一些具体方法提供一些默认/常见行为。

因此,我考虑将这些具体方法定义为我将要开发的接口(interface)的扩展方法,以代替抽象类。

有人可以指导我的设计决策吗?如果您不同意我的观点,请用我们在这样做时可能面临的场景/问题来证明您的论点。因此,它将提高我的知识。

最佳答案

这两种方法非常不同。

使用抽象类并通过抽象/虚拟方法,您允许派生类重写扩展方法所不具备的行为。扩展方法归根到底是扩展,它们不是类型的一部分,并且当有人检查 API 和类型提供的功能时很难发现。

第二点,为您自己创建的类型创建扩展方法并不符合逻辑。使用抽象基类可以使您的层次结构保持清晰,并使您的模型对重写行为的修改保持开放。

关于c# - 我们可以用具有扩展方法的接口(interface)替换抽象类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38846108/

相关文章:

c# - EF Core - 唯一约束,包括迁移中未检测到的导航属性

c# - HtmlAgilityPack 的字数

c# - HttpContext 和 SignalR HubCallerContext 之间的统一静态类

c# - 使用 inUse() 方法为接口(interface)寻找一个好的名称

c# - 类型 'System.Data.Linq.DataContext' 在未引用的程序集中定义

c# - 泛型方法如何知道不可访问的类型? (或 "How I Lost a Dollar")

c# - System.EntryPointNotFoundException + 无法安装包 'SQLite.Interop.dll 1.0.103' 。我的项目目标'.NETFramework,Version=v4.6.1'

c# - 无法在计算机 '.' 上打开 <MyService> 服务

c# - 在 XAML 中使用 ["string"] 语法进行数据绑定(bind)

c# - 从 RichEditBox 中删除图像