在Ruby中,我可以在没有任何方法的情况下构建装饰器,并使用method_missing将所有调用转发给car对象.
在Java中,我可以构建一个Proxy对象,该对象通过一个方法运行所有代码,然后转发它.
在C#中我能做些类似的事吗?
更新:
基于answeres和我读过的关于System.Reflection.Emit的内容,应该可以编写一个与此类似的方法:
Type proxyBuilder(Type someType,delagate functionToBeApplIEd,Object forward)
其中type实现someType的所有接口,执行functionToBeApplIEd,然后在返回其返回时将方法调用转发给object.
是否有一些lib可以做到这一点,还是我必须自己编写?
解决方法 对于代理,你可以查看“RealProxy”,如果你想使用标准类型,虽然使用它有点麻烦(它需要你的类继承MarshalByRefObject).public class TestProxy<T> : RealProxy where T : class{ public T Instance { get { return (T)GettransparentProxy(); } } private Readonly MarshalByRefObject refObject; private Readonly string uri; public TestProxy() : base(typeof(T)) { refObject = (MarshalByRefObject)Activator.CreateInstance(typeof(T)); var objRef = RemotingServices.Marshal(refObject); uri = objRef.URI; } // You can find more info on what can be done in here off MSDN. public overrIDe IMessage Invoke(IMessage message) { Console.Writeline("Invoke!"); message.PropertIEs["__Uri"] = uri; return ChannelServices.SyncdispatchMessage(message); }}
或者你也可以从Castle获得“DynamicProxy”..在我的经验中它的效果更好一点..
如果你使用其中一个,你不会有必要获得很好的性能,我主要使用它们可能在一开始可能会很慢的调用..但你可以试试看,如果你想.
marc的解决方案将有更好的表现.
总结以上是内存溢出为你收集整理的在c#中实现代理或装饰器类的最短方法是什么?全部内容,希望文章能够帮你解决在c#中实现代理或装饰器类的最短方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)