【发布时间】:2018-10-08 07:47:11
【问题描述】:
下面的代码是否存在架构问题?所谓的diamond problem 是否可能存在接口或类似问题?
interface IComponent
{
void DoStuff();
}
interface ITitledComponent : IComponent
{
string Title { get; }
}
abstract class ComponentBase : IComponent
{
public void DoStuff()
{
throw new NotImplementedException();
}
}
class MyComponent : ComponentBase, ITitledComponent
{
public string Title => throw new NotImplementedException();
}
当然,类的菱形继承是一个糟糕的决定,这在 C# 中是不可能的。但是关于接口我没有找到资料。
【问题讨论】:
-
我的理解是对的,通常称为"diamond problem"。当然,纯接口不用担心,因为它们没有实现。
-
这被称为“钻石问题”。抱歉术语错误。 en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem
-
钻石问题是关于类而不是接口,你不能在 C# 中拥有它,因为你不能继承超过 1 个类
-
@R.Savelyev:乍一看,您不需要从
IComponent继承ITitledComponent。有什么理由这样做吗? -
如果
ITitledComponent和ComponentBase都提供了DoStuff的实现 从IComponent和MyComponent没有,那应该是钻石问题。但是由于接口不能提供实现,所以这不是钻石问题。即使接口的默认实现出现(可能在 c# 8 中),也不会产生菱形问题。
标签: c# inheritance interface abstract-class