public interface ITarget{ void Method(); } public class A:ITarget{ public void Method(){} } public class B:ITarget { ITarget target_; public B(ITarget target){ target_=target; } public void Method(){ //dosomething target_.Method(); } }
是否这样?
不是这样,这里面A类是不确定类,网上的资料都是用重载去实现,B是实现动态代理的,B类可以反射A类的方法,实现对A类的动态代理
@抽烟的烦恼: 也没有ITarget?
@Yu: 没,没有共同的继承同一接口
@抽烟的烦恼: 已经OK了,用微软自带的System.Runtime.Remoting.Proxies 下的RealProxy可以满足需求
@抽烟的烦恼: 不要把重载和重写弄混了,强迫症犯了
不是很理解。
肯定可以实现,但如楼上所言,你的需求有点模糊,不是很明确,不能给你具体的方案。
感觉不需要动态代理啊,B类里面处理完业务逻辑之后直接调用A类不行吗?
问题是你有A1,A2,A3...无限多的类,这样岂不是不好
@抽烟的烦恼: 那照你这么说的话,你的B类里面需要调用很多类的很多方法,用动态代理的话你打算怎么做呢?
@晓菜鸟: 使用反射的方式,把B类反射出来,实现动态代理啊,这个在AOP里面是比较基本的功能
@抽烟的烦恼: 额,你误会我意思了,我知道你是用的反射,提问的时候已经说的很清楚了,但是使用反射没要求方法一定要是virtual的啊!
@晓菜鸟: 可以了,找了半天用微软自带的System.Runtime.Remoting.Proxies 下的RealProxy可以满足需求
你可以看看postsharp,这是一个AOP框架。对方法、属性等都可以做日志,特点是编译的时候就确定了,不过是收费的。
看看这个http://www.cnblogs.com/jin-yuan/p/3811077.html,
现在有好多现成的框架就可以支持你的需求,例如Unity,Spring.net,PostSharp .....
好的谢谢
b类里定义几个抽象或虚方法,构造方法里写必须执行的内容,然后A类覆写这些方法
b类是工具生成的第三方类,优先不考虑改造,因此能不改就改
@抽烟的烦恼: b类不能改,那这个就没戏了,你可以增加一个b2类,然后其他A类继承他