2009-11-05 119 views
0

派生类的类型我试图了解一些类似的职位,但不太了解他们的目的,我想我会解释我自己...创建它在运行时

我有一个类 - 完全用包含属性和方法的代码定义。许多方法都是虚拟的,可以被派生类进一步覆盖。所以,我有类似如下的

Class_Main 
    -- Class_A : Class_Main 
    -- Class_B : Class_Main 
    -- Class_C : Class_Main 
    -- Class_D : Class_Main 

然后我需要定义,可以从AD动态地推导出的一个多类...如:

Class_X : Class_A (or Class_B or Class_C or Class_D) 

,因为我有额外的属性和方法在Class_X内。由于C#不能从两个实际类派生,但可以使用接口,但不能在接口中使用代码,只需抽象签名,我该如何去做这种实现。

由于

+0

你打算如何使用此范例实例化对象? – jheddings 2009-11-05 02:00:54

回答

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_X(通过_impl对象)内的任何Class_Main的运行时行为。

+0

这是我的想法,但不知道是否有另一种方式...然后我的class_X的方法会做类似于 返回_impl.SomeFunction(whateverParam)..谢谢 – DRapp 2009-11-05 12:17:11

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的所有方法。