我试图理解一些类似的帖子,但不太了解他们的目的,并且认为我会解释我自己......
我有一个类 - 完全定义了包含属性和方法的代码。许多方法都是虚拟的,可以通过进一步的派生类来覆盖。所以,我有类似下面的内容
Class_Main
-- Class_A : Class_Main
-- Class_B : Class_Main
-- Class_C : Class_Main
-- Class_D : Class_Main
然后我需要再定义一个可以从A-D动态派生的类......例如:
Class_X : Class_A (or Class_B or Class_C or Class_D )
因为我在Class_X中有其他属性和方法。由于C#不能从两个实际类派生,但可以使用接口,但是你不能在接口中使用代码,只需抽象签名,我该如何进行这样的实现。
由于
答案 0 :(得分:1)
您所描述的内容听起来有点像duck typing。这在C#中不可用,因为它是一种静态类型的语言。也许当C#4到来时,dynamic
会给你你想要的东西。
如果需要使用这些类的功能“填充”Class_X
,那么在实例化时将其传递给类是很常见的:
public class Class_X {
private Class_Main _impl;
public Class_X(Class_Main impl) {
_impl = impl;
}
}
Class_X classXA = new Class_X(new Class_A());
Class_X classXB = new Class_X(new Class_B());
此时,您的Class_X
个实例可以访问Class_Main
属性&所有派生类的方法。这不会使Class_X
成为聚合,只是使您能够使用Class_Main
内的任何Class_X
(通过_impl
对象)的运行时行为。
答案 1 :(得分:0)
从一个类扩展并包含X类中的另一个类,并且只需要适配器方法直接映射到内部类。
所以,现在正好是C#,只是原型设计:
class ClassA {
public void FunctionClassA(...) { ... }
public void FunctionClassB(...) { ... }
}
class ClassX : ClassB {
private ClassA classa;
public ClassX() {
classa = new ClassA();
}
public void FunctionClassA(...) { classa.FunctionClassA(...); }
}
因此,ClassX现在有一个从ClassA继承的函数(由外观),并包含ClassB的所有方法。