c#多重inheritance

我想在C#中实现这一点

(伪代码)

class A; class B : A; class C : A, B; ... A ac = (A)c; ... B bc = (B)c; 

这可能吗?

在这种特殊情况下,您不需要多重inheritance:如果C类仅从Binheritance,则可以将任何C类实例强制转换为B A ; 由于B已经从A派生,因此C不需要再次从A派生:

 class A { ... } class B : A { ... } class C : B { ... } ... C c = new C(); B bc = (B)c; // <-- will work just fine without multiple inheritance A ac = (A)c; // <-- ditto 

(正如其他人已经说过的,如果你需要类似于多重inheritance的东西,请使用接口,因为类可以根据需要实现尽可能多的接口。)

不,C#不支持多重inheritance类。

一个类可以从一个类inheritance,也可以实现多个接口。

在C#中是不可能的,但是,您也应该考虑这是否是您真正想要的场景。

C真的是AB吗? 或者C AB。 如果后者为真,则应使用合成而不是inheritance。

您可以使用接口进行多重inheritance。

C#不支持多重inheritance,但正如其他人建议您可以使用多个接口。 但是,即使使用接口,有时您也希望在同一个类中重用多个接口实现,这又需要多次inheritance。

为了解决这个问题(即使它几乎从不需要 ),我已经提出了使用部分类和T4文本模板的组合的模拟多重inheritance方法。 这是一个轻微的黑客,但它比在许多派生类中复制/粘贴相同的接口实现更好。 以下是一个简化示例:

IInterface.cs

 public interface IInterface { void Foo(); } 

InterfaceImpl.cs

 public partial class InterfaceImpl : IInterface { public void Foo() { Console.WriteLine("Foo"); } } 

BaseClass.cs

 using System; public class BaseClass { public void Bar() { Console.WriteLine("Bar"); } } 

DerivedClassA.cs

 public partial class DerivedClassA : BaseClass, IInterface { public void FooBar() { this.Foo(); this.Bar(); } } 

DerivedClassAInterfaceImpl.tt

 <#@ template debug="false" hostspecific="true" language="C#" #> <#@ output extension=".cs" #> <# var codeText = System.IO.File.ReadAllText(this.Host.ResolvePath("InterfaceImpl.cs")).Replace("InterfaceImpl", "DerivedClassA"); #> <#= codeText #> 

DerivedClassB.cs

  public partial class DerivedClassB : BaseClass, IInterface { public void BarFoo() { this.Bar(); this.Foo(); } } 

DerivedClassBInterfaceImpl.tt

 <#@ template debug="false" hostspecific="true" language="C#" #> <#@ output extension=".cs" #> <# var codeText = System.IO.File.ReadAllText(this.Host.ResolvePath("InterfaceImpl.cs")).Replace("InterfaceImpl", "DerivedClassB"); #> <#= codeText #> 

这有点令人讨厌,这需要为每个想要使用接口实现的派生类创建一个tt文件,但如果InterfaceImpl.cs超过几行代码,它仍然可以保存复制/粘贴代码。 也可能只创建一个tt文件并指定所有派生的部分类的名称并生成多个文件 。

我在这里提到了类似问题的这种方法。