动态代理模式和混合模式的使用实例5

动态代理模式和混合模式的使用实例5
领先的ORM和国际奥委会的产品离不开动态代理,作为开发商,最不重视内部的动态代理机制,而是理解和模式是必要的,一般的规则,例如:虽然你开发使用POCO期间,由于开放的动态代理,运行期间没有少。在这纸,5代理的生成模式和1混合模式的简要介绍,并最后给出了一个实例。

复制代码代码如下所示:
iplayable公共接口
{
无效播放();
}

动物类:iplayable
{
公共虚拟无效播放()
{
console.writeline(动物玩。);
}
}

公犬类:动物
{
公共覆盖无效播放()
{
console.writeline(狗玩。);
}
}

irunable公共接口
{
运行();
}

公共课:irunable runability
{
公共空白运行()
{
console.writeline(runability。跑);
}
}

公共课animalinterceptor:iinterceptor
{
公共无效拦截(iinvocation调用)
{
console.writeline(前animalinterceptor。拦截);
如果(invocation.invocationtarget!= null)
{
调用。继续();
}
console.writeline(后animalinterceptor。拦截);
}
}
第一:classproxy

复制代码代码如下所示:
{
console.writeline(************* classproxy ************* ;
无功发生器=新proxygenerator();
VaR的动物= generator.createclassproxy(新animalinterceptor());
动物(游戏);

console.writeline(animal.gettype());
console.writeline(animal.gettype()。BaseType);

无功compositefield = animal.gettype()。GetField(__target );
console.writeline(compositefield);

foreach(在animal.gettype VAR接口型()GetInterfaces()))
{
Console.WriteLine (interfaceType);
}
}
第二种:classproxywithtarget

复制代码代码如下所示:
{
console.writeline(************* classproxywithtarget ************* ;
无功发生器=新proxygenerator();
VaR的动物= generator.createclassproxywithtarget(新狗()、新AnimalInterceptor()));
动物(游戏);

console.writeline(animal.gettype());
console.writeline(animal.gettype()。BaseType);

无功compositefield = animal.gettype()。GetField(__target );
console.writeline(compositefield);

foreach(在animal.gettype VAR接口型()GetInterfaces()))
{
console.writeline(接口型);
}
}

第三种:interfaceproxywithouttarget

复制代码代码如下所示:
{
console.writeline(************* interfaceproxywithouttarget ************* ;
无功发生器=新proxygenerator();
VaR的动物= generator.createinterfaceproxywithouttarget(新animalinterceptor());
动物(游戏);

console.writeline(animal.gettype());
console.writeline(animal.gettype()。BaseType);

无功compositefield = animal.gettype()。GetField(__target );
console.writeline(compositefield);

foreach(在animal.gettype VAR接口型()GetInterfaces()))
{
console.writeline(接口型);
}
}

第四种:interfaceproxywithtarget

复制代码代码如下所示:
{
console.writeline(************* interfaceproxywithtarget ************* ;
无功发生器=新proxygenerator();
VaR的动物= generator.createinterfaceproxywithtarget(新狗()、新AnimalInterceptor()));
动物(游戏);

console.writeline(animal.gettype());
console.writeline(animal.gettype()。BaseType);

无功compositefield = animal.gettype()。GetField(__target );
console.writeline(compositefield);

foreach(在animal.gettype VAR接口型()GetInterfaces()))
{
console.writeline(接口型);
}
}

第五种:interfaceproxywithtargetinterface

复制代码代码如下所示:
{
console.writeline(************* interfaceproxywithtargetinterface ************* ;
无功发生器=新proxygenerator();
VaR的动物= generator.createinterfaceproxywithtargetinterface(新狗()、新AnimalInterceptor()));
动物(游戏);

console.writeline(animal.gettype());
console.writeline(animal.gettype()。BaseType);

无功compositefield = animal.gettype()。GetField(__target );
console.writeline(compositefield);

foreach(在animal.gettype VAR接口型()GetInterfaces()))
{
console.writeline(接口型);
}
}

混合模式

复制代码代码如下所示:
{
console.writeline(************* mixin ************* ;
无功发生器=新proxygenerator();
VaR选项=新proxygenerationoptions();
Options.AddMixinInstance(新runability());
VaR的动物= generator.createclassproxy(选项,新的AnimalInterceptor());
动物(游戏);
(动物irunable)Run();

console.writeline(animal.gettype());
console.writeline(animal.gettype()。BaseType);

无功compositefield = animal.gettype()。GetField(__target );
console.writeline(compositefield);

foreach(在animal.gettype VAR场()GetFields()))
{
如果(field.name.startswith(__mixin ))
{
console.writeline(场);
}
}

foreach(在animal.gettype VAR接口型()GetInterfaces()))
{
console.writeline(接口型);
}
}

tag:混合模式动态代理模式实例电脑软件

相关内容