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# 不能从两个实际的类派生,但可以使用接口,但你不能在接口中有代码,只有抽象签名,我怎么可能去做这样的实现。

谢谢

4

2 回答 2

1

你所描述的听起来有点像鸭子打字。这在 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_MainClass_X_impl

于 2009-11-05T02:03:37.353 回答
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 的所有方法。

于 2009-11-05T02:01:12.897 回答