在扩展另一个类的类上实现DynamicObject功能
本文关键字:实现 DynamicObject 功能 扩展 另一个 | 更新日期: 2023-09-27 18:25:47
我需要一个关于模拟C#类的多重继承的最佳方法的建议,该类需要通过对动力学的支持进行扩展。
我有一个类MainClass不需要依赖于DLR——它的所有属性和方法都是静态编译的。它有很多超负荷的操作员。它是某种DSL。
ExtendedClass基本上是一个支持C#动态的MainClass,例如,除了所有MainClass功能外,它还需要重载DynamicObject的TryGetMember/TryInvokeMember,因此客户端可以将其与运行时评估的扩展属性一起使用。
这里出现了DynamicObject是一个类而不是接口的问题。因此ExtendedClass必须仅从DynamicObject派生,这意味着它基本上应该复制所有MainClass功能。
我相信这种情况并不罕见(两个类似的类,其中一个必须派生自某个系统类,因此不可能通过从另一个继承来重用功能)。有没有比直接方法更聪明的方法来处理这种情况:将MainClass作为成员字段添加到ExtendedClass,复制其所有方法/属性,并简单地将其转发到MainClass的包含实例?
用这样一个非常通用的描述很难说。我熟悉的常见模式是:
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
来对蹦床进行排序,那么您的动态属性或方法就有了自己的命名空间。