2013-08-01 49 views
1

我需要为模拟C#类的多继承的最佳方式提供建议,该类需要通过支持动态进行扩展。在扩展另一个类的类上实现DynamicObject功能

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

ExtendedClass基本上是一个支持C#动态的MainClass,除了所有需要重载DynamicObject的TryGetMember/TryInvokeMember的MainClass功能外,客户端还可以在运行时对扩展属性进行评估。

这里有一个DynamicObject是一个类的问题,而不是一个接口。所以ExtendedClass只能从DynamicObject派生,这意味着它应该基本上复制所有的MainClass功能。我猜这种情况并不少见(两个类似的类,一个必须从某个系统类派生,因此不可能通过继承另一个系统来重用功能)。有没有比直接的方法更聪明的方式来处理这种情况:将MainClass作为成员字段添加到ExtendedClass,复制其所有方法/属性并简单地将其转发给MainClass的包含实例?

回答

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第一排序蹦床的动态属性或方法都有自己的命名空间。

+0

但我现在看着IDynamicMetaObjectProvider,它不会解决这个问题吗?根据文档,当我可以将动态添加到从另一个类继承的类时,这是确切的情况。 –

+0

这是,但它是很多工作。如果你想走这条路,我会对结果非常感兴趣。 – jbtule

+0

现在看看它。我的表情并不那么复杂,希望它不会那么难。但我认为这需要时间。 –

相关问题