c# - 如何避免冗余的接口(interface)实现?

标签 c# architecture interface

我有一个设计问题。 我将提出一个假设情况。 我的应用程序需要几个接口(interface)来使对象可用。假设他们是;

1.  IAdult.cs, with two properties
  a.    Age
  b.    LicenceNo.
2.  IEducated.cs, with two methods
  a.    Read()
  b.    Write()

让我们假设这些接口(interface)的实现在大多数时候应该保持不变。所以,如果我们必须从这些接口(interface)中实现一个抽象类,我们可以简单地创建一个类,比如 abstract class EducatedAdult { }。 现在我们定义三个不同的类及其各自的继承和一组各自的属性;

1.  Carpenter.cs (derives from class A)
2.  Plumber.cs (derives from class B)
3.  Programmer.cs (derives from class C)

这里,类 A、B、C 是一些我无法编​​辑的外部库的一部分。现在要使这些对象在程序中可用,它们需要实现上述给定的接口(interface)。所以问题是对于这些类中的每一个,我都必须显式地实现上述接口(interface)。有没有更好的设计,我不必在所有类中冗余地实现接口(interface)。如果可能的话,这可能是一个解决方案;

EducatedAdult<t>: t, IAdult, IEducated { <implementation of interfaces> } 稍后,也许我可以像这样初始化我的派生类;

Carpenter carpenter = new EducatedAdult<Carpenter>() .这并不是一个理想的解决方案,因为 carpenter 对象的公共(public)接口(interface)仍然不包括我的接口(interface)成员(不需要转换)。但是,什么才是最合适的设计呢?

最佳答案

您不能真正为 .NET 中的接口(interface)提供默认实现,它只能由实现类来提供实现,但您可以使用接口(interface)上的扩展方法伪造它。

关于c# - 如何避免冗余的接口(interface)实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5829439/

相关文章:

c# - ASP.NET Core 模型绑定(bind)错误消息本地化

c# - mvvm light Messenger.Default.Register 查看代码隐藏?

c# - 一个坚实而有组织的架构应该如何?

javascript - Rails 中神圣的 javascript 选项!帮助!

java - 如何使用变量名在派生类构造函数中初始化数组?

java - 工厂方法如何返回接口(interface)和抽象类的实例?

c# - 巴克莱加密 asp.net (VB to c#)

c# - 在 C# 中处理一批内存流的正确方法

javascript - 从 MVC 下载文件

java - 如何避免 swagger codegen 接口(interface)中的默认方法实现?