1

我需要关于模拟 C# 类的多重继承的最佳方法的建议,该类需要通过动态支持进行扩展。

我有一个类 MainClass 不需要依赖于 DLR - 它的所有属性和方法都是静态编译的。它有很多重载的运算符。它是某种 DSL。

ExtendedClass 基本上是一个支持 C# 动态的 MainClass,例如,除了所有 MainClass 特性之外,它还需要重载 DynamicObject 的 TryGetMember/TryInvokeMember,因此客户端可以将它与在运行时评估的扩展属性一起使用。

DynamicObject 是一个类而不是接口的问题出现了。因此 ExtendedClass 只能从 DynamicObject 派生,这意味着它应该基本上复制所有 MainClass 功能。

我想这并不少见(两个相似的类,一个必须从某个系统类派生,因此无法通过从另一个继承来重用功能)。有没有比直接方法更聪明的方法来处理这种情况:将 MainClass 作为成员字段添加到 ExtendedClass,复制其所有方法/属性并将其简单地转发到 MainClass 的包含实例?

4

1 回答 1

1

很难用这样一个非常笼统的描述来说。我熟悉的常见模式是:

public class MainClass{
      foo bar();
      more stuff {get;set;}
      ....
}

public class ExtendedClass:MainClass{
      protected class Helper:DynamicObject{ ...}
      private Helper _helper;
      public Extended(){
          _helper= new Helper(this);
      } 

      public dynamic Extend {
         get{ return _helper};
      }
}

Extend这样,如果您需要首先调用某种蹦床,您的动态属性或方法就有自己的命名空间。

于 2013-08-01T16:10:00.110 回答