是否有类似可以实现的类?

Noe*_*mer 6 c# inheritance interface multiple-inheritance abstract

我想编写一个继承自A(base)的
类X(this)可以执行B(?)的方法,并且必须实现C(接口)的成员.


实现A和C不是问题.但是由于X不能从多个类派生,所以X似乎不可能继承A和B的逻辑.注意A是非常重要的基类,B几乎是一个接口但包含可执行行为.我不希望B成为接口的原因是因为每个继承或实现它的类的行为都是相同的.

我是否真的必须将B声明为接口并为每个需要B行为的X实现完全相同的10行代码?


2个月后,
我正在学习C++,以便在UE4(虚幻引擎4)中使用它.
由于C++比C#严格得多,它实际上包含一个描述这种行为的模式 实现 idom术语:这些被称为mixin.

你可以阅读一个关于C++混入段落这里第9页(第二款).

das*_*ght 5

我是否真的必须声明B为接口并为每个X需要行为的行执行完全相同的10行代码B

是的,不是.你需要建立B一个界面.但是,不应在所有接口实现中复制常见的方法实现.相反,他们应该进入接口的类扩展B:

public interface B {
    void MethodX();
    void MethodY();
}
public static class ExtensionsB {
    public static void MethodZ(this B b) {
        // Common implementations go here
    }
}
Run Code Online (Sandbox Code Playgroud)

扩展方法提供了一种"水平"共享实现的方法,而不会让您的类继承自第二个类.扩展方法的行为就像它们是类的常规方法一样:

class X : A, B {
    public void MethodX() {...}
    public void MethodY() {...}
}
public static void Main(string[] args) {
    var x = new X();
    x.SomeMethodFromA();
    x.MethodX(); // Calls method from X
    x.MethodY(); // Calls method from X
    x.MethodZ(); // Calls method from ExtensionsB
}
Run Code Online (Sandbox Code Playgroud)