繁体   English   中英

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

[英]Is there something like a class that can be implemented?

我想写一个
X级 (这个)哪个
继承自A (基础)可以
执行B (?) 的方法,必须
实现C (接口) 的成员

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

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


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

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

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

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

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

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

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
}

我认为你最好的选择是在A的构造函数中要求一个B实例,然后根据需要公开或调用B的方法:

public class X : A, C
{
    private readonly B _b;

    public X(B b)
    {
        _b = b;
    }
}

如果你查看Composition over inheritance,你会发现很多关于这种方法的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM