【问题标题】:Multiple Inheritance in C# with Calling to base methodsC# 中的多重继承与调用基方法
【发布时间】:2026-01-13 02:05:02
【问题描述】:
using System;               


public class A
{
    public  virtual string GetDataFromA()
    {
       return "This Is base Class A" ;  
    }
}

public class B
{
    public  virtual string GetDataFromB()
    {
       return "This Is base Class B" ;  
    }
}

public class C : B,A
{
     public overide string GetDataFromB()
     {
         var data = base.GetDataFromB();
         return data + "This Is child Class C";
     }

     public overide string GetDataFromA()
     {
         var data = base.GetDataFromB();
         return data + "This Is child Class C";
     }
}

public class Program
{
    public static void Main()
    {
        var myCobject = new c();
        c.GetDataFromB();
        c.GetDataFromA();
    }
}

这是一个简单的问题,我知道我们不能在 C# 中使用多重继承,这就是我们使用接口的原因。但我的问题是当我使用多重继承时如何调用基类方法 如果我遗漏了一些东西,请告诉我。我想在我的 C 类中调用 A 和 B 基类方法。同时我想在子类方法 A 和 B 中调用基类方法强>

【问题讨论】:

  • C# 在设计上不支持多重继承。您将获得的最接近的是具有默认方法实现的接口。
  • 是的,我明白了,这就是为什么我把我们使用接口的消息。但主要问题是我在两个尊重类中使用了虚拟方法并覆盖了这两个方法并调用了基本方法我们如何实现这类问题
  • “我知道我们不能在 C# 中使用多重继承......我的问题是当我使用多重继承时我是如何____”嗯......你不知道吗?我真的不明白怎么会有人问这样的问题。

标签: c# oop inheritance interface multiple-inheritance


【解决方案1】:

如果您了解“组合优于继承”的想法,您可以通过以下代码解决您的问题。我们选择组合的原因可以在这个链接(https://medium.com/humans-create-software/composition-over-inheritance-cb6f88070205)中解释。还有一些其他的方法可以解决这个问题,其中之一就是装饰器模式。但为了简单起见,构图足以胜任这项工作。

public class A
{
    public  virtual string GetDataFromA()
    {
       return "This Is base Class A" ;  
    }
}

public class B
{
    public  virtual string GetDataFromB()
    {
       return "This Is base Class B" ;  
    }
}

public class C
{
     private readonly _aService = new A();
     private readonly _bService = new B();
     public overide string GetDataFromB()
     {
         var data = _bService.GetDataFromB();
         return data + "This Is child Class C";
     }

     public overide string GetDataFromA()
     {
         var data = _aService.GetDataFromB();
         return data + "This Is child Class C";
     }
}

public class Program
{
    public static void Main()
    {
        var myCobject = new c();
        c.GetDataFromB();
        c.GetDataFromA();
    }
}

【讨论】:

  • 这是 OOP 概念的基础 :),我仍在寻找一个概念,即您可以继承多个接口并与每个基类对话。它作为制造商调用接口,但我找不到好的博客或任何有关它的信息。这很好:) 但它只是在一个类中创建对象,当涉及到依赖注入时你不能这样做..
【解决方案2】:

它有变得混乱的风险。解决这个问题的简单方法是类组合,如下所示:

public class A
{
    public void GetData()
    {
        Console.WriteLine("Data coming from A");
    }
}
// Here we use composition over inheritance.
public class B
{
    A _a;
    public B()
    {
      _a = new A();
    }
    public virtual void GetData()
    {
        _a.GetData();
        Console.WriteLine("Data coming from B");
    }
}
public class C : B 
{
    public override void GetData()
    {
        base.GetData();
        Console.WriteLine("Data coming from C");
    }
}

现在,像这样使用,你可以使用下面的代码:

var c = new C();
c.GetData();

产生输出:

Data coming from A
Data coming from B
Data coming from C

进一步说明:您也可以轻松地将组合应用于BC 类,就像我对AB 所做的那样。

【讨论】:

  • 这种方式也不错,但这是构造函数链,而不是接口的多重继承方式。我仍在寻找一个概念,即您可以继承多个接口并与每个基类进行对话。它作为制造商的调用接口,但我找不到好的博客或任何有关它的信息:)。