c# - 如何在 C# 中模拟多重继承?

标签 c# .net inheritance

<分区>

Possible Duplicate:
Multiple Inheritance in C#

我知道 C# 不支持类中的多重继承。

但是,我需要在 MyClass 中添加 ClassA 和 ClassB 的特性:

public class ClassA
{
    /* Third party class*/
}
public class ClassB
{
    /* Third party class*/
}

public class MyClass : ClassA, ClassB
{
    /*Compilation error*/
}

有什么办法可以实现吗?

最佳答案

您只能在 C# 中拥有多个接口(interface) 继承。您可以对这些第三方类做的最好的事情是在 MyClass 中封装每个类的实例并重新创建每个函数调用并将其传递给适当的实例。

public class MyClass
{
    ClassA a = new ClassA();
    ClassB b = new ClassB();

    void AMethod()
    {
       a.AMethod();
    }

    int BMethod(int value)
    {
      return b.BMethod(value);
    }
}

如果您需要能够在需要 ClassA 的位置使用此类,那么您可以添加转换运算符以将其转换回 ClassAClassB。您需要仔细考虑此时是返回这些实例的新实例还是公开您的内部实例更合适。

显然,如果 ClassAClassB 确实 实现了任何接口(interface),我建议您在新类中也实现这些接口(interface)。

但是,归根结底,C# 没有多重实现继承。如果您需要(这种情况很少见),那么 C# 不是合适的语言。任何其他 CLR 语言也不是,因为这是 CLR 限制,而不是特定的 C# 限制。

关于c# - 如何在 C# 中模拟多重继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274320/

相关文章:

c# - 如何使用控制面板程序功能中显示的复选框

c# - Sharepoint 64 位上的 32 位二进制文​​件,尝试加载格式不正确的程序

c# - 为什么我的方法声明会产生不一致的可访问性错误?

c# - 帮助在 C# .Net 中设置 RTSP 流服务器

java - 异常 : Code refactoring and best design (protected or getter/setter)

Java泛型问题

c# - LINQ:将 SQL WITH 子句转换为 LINQ 和 Entity Framework

c# - ConcurrentBag 与自定义线程安全列表

.net - Entity Framework 4.1 DbContext API 中的接口(interface)和存储库抽象中断子查询?

c++ - Clang 编译有效,而 gcc 不适用于菱形继承(钻石问题)