我想写一个
X级(这个)哪个
继承自A(基础)可以
执行B(?)的方法,必须
实现C(接口)的成员.
X级(这个)哪个
继承自A(基础)可以
执行B(?)的方法,必须
实现C(接口)的成员.
实现A和C不是问题.但是由于X不能从多个类派生,所以X似乎不可能继承A和B的逻辑.注意A是非常重要的基类,B几乎是一个接口但包含可执行行为.我不希望B成为接口的原因是因为每个继承或实现它的类的行为都是相同的.
我是否真的必须将B声明为接口并为每个需要B行为的X实现完全相同的10行代码?
两个月后
我目前正在学习C在UE4(虚幻引擎4)中使用它.
由于C比C#严格得多,它实际上包含描述此行为的模式实现idom术语:这些称为mixins.
您可以在第9页(第二段)上阅读有关C mixin here的段落.
解决方法
Do I really must declare
B
as an interface and implement the exact same 10 lines of code for eachX
that needs the behavIoUr ofB
?
是的,不是.你需要让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 }