如何证明C#中没有多重继承?

如何证明C#中没有多重继承?,c#,.net,interface,multiple-inheritance,C#,.net,Interface,Multiple Inheritance,是的,我被问到这个问题,我能提供的只是我知道的以下信息的摘要。当然,除了在编写所谓的预期代码时出现错误之外,如果我们能够编写1,是否还有更有效的理由来证明C#不支持多重继承 在C#的MI环境中,在SO和外部web中提出了许多问题,如何在C#中模拟/模拟MI,如何处理C#中缺少MI的问题,等等。。因此,我的问题可能反映了这些问题的一些两面性……但是我还没有找到答案,因此想到了射击 跨语言的MI的不同实现使得实现语言中立的实现成为一个挑战 可以使用接口,这使得MI有点冗余 MI增加了铸造、反射等方

是的,我被问到这个问题,我能提供的只是我知道的以下信息的摘要。当然,除了在编写所谓的预期代码时出现错误之外,如果我们能够编写1,是否还有更有效的理由来证明C#不支持多重继承

在C#的MI环境中,在SO和外部web中提出了许多问题,如何在C#中模拟/模拟MI,如何处理C#中缺少MI的问题,等等。。因此,我的问题可能反映了这些问题的一些两面性……但是我还没有找到答案,因此想到了射击

  • 跨语言的MI的不同实现使得实现语言中立的实现成为一个挑战
  • 可以使用接口,这使得MI有点冗余
  • MI增加了铸造、反射等方面的复杂性
  • 作者指出,实现的多重继承在C#中是不允许的所以要停止导致

    因此,一个类从多个超级/基类/父类继承更有意义。例如,Class House继承自Class Building(名词,表示建筑物的细节{House,school,office,hotel等})和Class Building(表示建筑物的构造细节)。因此,如果我们能够

    1. code wish we could write
    public class House: Building, Construction {
    // methods, properties...
    } 
    
    相反,我们必须编写
    接口

    interface Buildstruction
    {
        methodConstruction();
    }
    //class Construction then has to implement the interface
    
    public class  House: Building, Buildstruction
    {
        Construction ConstionObject;
        methodBuilding();
        methodConstruction() { ConstionObject.methodConstruction(); }
    }
    
    不允许多个超类具有相同名称的方法(例如,
    calculate
    method)不是更容易吗?然后,我意识到这些父类/超类需要有创建自己的属性和方法的自由,而不依赖于另一个类

    因此,MI在C#中似乎不可能完成任务,是什么原因决定了这一点。。是不是因为,

    • 钻石问题
    • 还没有人真正指出MI在编程中的真正用途
    还有,

    • MI增加了有关
      铸造
      反射
      的复杂性
    • 接口使MI有点冗余
    • MI导致代码(支持完全OOP)与语言无关的问题

    感谢您的评论/回答,它不仅说明了“这是C语言的创造方式…”:)

    可能重复-2,似乎有点苛刻。这是一个公平的问题,我不认为答案是那么直观。此外,在提问之前,已经做了大量的研究。那些将问题标记为结束的人:请注意,我这里有4个问题:C#不支持MI,仅仅是因为,
    1。
    钻石问题吗?还没有人真正指出MI在编程中的真正用途<代码>2。
    MI如何增加铸造、反射方面的复杂性<代码>3。接口如何使MI有点冗余<代码>4。MI是如何导致代码(支持完全OOP)与语言无关的问题的?@Petradulin正如您在我的问题中所看到的那样,我已经说过,某些位可能看起来重复,但事实并非如此。如果我能使用到目前为止的帖子/问题找到答案,我不会发布我的问题。所以这和你说的不一样。但我已经在里面找到了一些有趣的信息。说这些问题导致使用
    接口
    作为
    MI
    的解决方案。这里的主要问题是为什么会这样确定。我想这是一个公平的问题。Anders是设计C#和其他几种语言的人。我认为你的问题是公平的,肯定有很多猜测,所以我会尽力回答。Anders曾经说过Delphi,他没有把它放进去,因为它会减慢编译器的速度。这个理由很有道理。至于使用:MI有很多实际用途,请命名一个:在C++中,人们使用类型列表来“编译断言”。没有MI,类型列表是不可能的。