当你有一个实现了IVehicle接口的class car,你想要将其包装在一个装饰器中,该装饰器将所有调用转发到car并对其进行计数,你该如何做呢?
在Ruby中,我可以构建一个没有任何方法的装饰器,并使用method_missing将所有调用转发到car对象。
在Java中,我可以构建一个代理对象,通过一个方法运行所有代码,然后将其转发。
在C#中是否有类似的方法可用?
更新:
根据答案和我所读关于System.Reflection.Emit的内容,应该可以编写类似于以下示例的方法:
在Ruby中,我可以构建一个没有任何方法的装饰器,并使用method_missing将所有调用转发到car对象。
在Java中,我可以构建一个代理对象,通过一个方法运行所有代码,然后将其转发。
在C#中是否有类似的方法可用?
更新:
根据答案和我所读关于System.Reflection.Emit的内容,应该可以编写类似于以下示例的方法:
Type proxyBuilder(Type someType, delagate functionToBeApplied, Object forward)
where type执行someType的所有接口,执行functionToBeApplied并将方法调用转发到对象,同时返回其返回值。
是否有一些库可以做到这一点,还是我需要自己编写?
FooBase
是完全可选的”是什么意思?这是否意味着“任何IFoo
都是允许的”?分号使我将语句分开阅读,而论据本身足以增加混淆。尽管显而易见的指出:“这只是意味着FooBase
可以被任何其他实现了IFoo
接口的类替换”,但如果事情如此简单,我会感到失望。我不是对答案感到失望,而是对自己的偏执感到失望。抱歉我的表述有些啰嗦(现在我需要找到一个与之相应的习语)。 - jungle_moleIFoo
;FooBase
只是方便选择实现IFoo
的代码。 - Marc Gravell->
重载)2)我是否理解错误:您是说从抽象类继承是不好的实践?我自己认为它们是带有默认实现的接口,并且它们非常方便。并且可以将SomeFoo
实例称为IFoo
,显然。(与此同时,微软实现了扩展方法的多态性...) - jungle_mole