代码之家  ›  专栏  ›  技术社区  ›  R. Savelyev

C#中的接口是否可能出现菱形问题?

  •  2
  • R. Savelyev  · 技术社区  · 7 年前

    下面的代码中是否存在架构问题?这就是所谓的 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#中是不可能的。但是关于接口我没有找到信息。

    1 回复  |  直到 7 年前
        1
  •  3
  •   nvoigt    7 年前

    不,不可能用C#产生菱形问题,因为您只能从一个类继承。接口不是继承的,而是实现的。因此,编译器和编码器的实际问题是,拥有一个方法的两个实现而不知道为一个特定的类选择哪个实现永远不会发生。