[英]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.