实现.net下的动态代理

实现.net下的动态代理

ID:19305855

大小:475.00 KB

页数:15页

时间:2018-09-21

实现.net下的动态代理_第1页
实现.net下的动态代理_第2页
实现.net下的动态代理_第3页
实现.net下的动态代理_第4页
实现.net下的动态代理_第5页
资源描述:

《实现.net下的动态代理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、动态代理可以解决哪些问题 本文描述的动态代理可以解决以下问题: 问题1:接口约束问题 场景A:ComboBox类与ToolStripComboBox类的行为大部分相似,它们却不共享某个粒度较大的接口,以至于对这两个类的操作代码难以公用。 场景B:在泛型程序中,我们必需为泛型类型声明一个接口约束,才能使用该类型所对应接口约束的方法与属性。这样以来有一个问题:存在接口A,类型B,A中的所有属性和方法签名B都有,但B不是A的实现,不能由B转换为A。而由于某些原因,我们无法获得B的代码或者虽然能够获得B的代码,却由于种种考虑不能更改B的代码;大多数情况下,可以新写一

2、个类C,使类C继承自B,再让C实现接口A。然而,其一,代码量较大;其二,当B为Sealed时不能继承;其三:不方便使用继承(如:继承后,IDE中的设计器无法给新类提供支持)。 此时,我们希望动态代理能解决这个问题: 假定我们有一个接口: 1    public interface TInterface2    {3        String A { get; }4        String B(Object a, Object b, Object c, Object d, Object e);5    }6 有一个类:  1    public class 

3、ClassA 2    { 3        public String A  4        { 5            get 6            { 7                return String.Empty; 8            } 9        }1011        public String B(Object a, Object b, Object c, Object d, Object e)12        {13            return String.Empty;14        }15   

4、 }1617 我们需要这个动态代理类(假定为TypeTemplate)提供一个方法,能够方便的生成一个代理类实例,将ClassA的实例包装一下,转变为TInterface的实例: 1        public static TInterface Create(TImple instance) 2            where TInterface : class3            where TImple : class4        {5            ……6        }7 该方法生成一个实现

5、TInterface的动态类的实例。对于TInterface中的每一个属性或方法,该实例直接调用instance实例中具有同样签名的属性或方法,如果没有匹配的属性或方法,则抛出NotImplementedException异常。 问题2:快速生成现有实例类的Wrapper 场景C:假定接口TInterface有10个方法,类TImple中有9个方法与TInterface对应,为了实现TInterface,需要新写一个Wrapper类。最方便的写法是令Wrapper继承自TImple且实现接口TInterface,Wrapper只需新添实现那个未实现的方法即可。然

6、而,如前面所述,很多情况下使用继承不是最佳选择。不用继承的话,则需要Wrapper类实现TInterface的全部10个方法,枯燥又乏味。 此时,我们期待存在这样一种动态代理:它能够将几个实例B,C,D一起打包,使它适合接口A。这样一来,针对场景C,我们只需要写一个简单的Wrapper类,实现那个未实现的方法,然后与TImple实例一起由动态代理工厂打包生成一个新的代理类实例即可。 即:我们需要动态代理工厂TypeTemplate能够提供以下方法: 1        public static TInterface Create(TInt

7、erface instance, params Object[] impleInstances)2            where TInterface : class3        {4            …5        }6 该方法生成一个实现TInterface的类实例。对于TInterface中的每一个属性或方法,该实例依次从impleInstances中寻找具有同样签名的属性或方法,如果没有匹配的属性或方法,则抛出NotImplementedException异常。 问题3:AOP应用 场景D:当需要对方法进行拦截时我们需要动态代理。 AO

8、P是动态代理最经典的应用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。