动态代理模式和混合模式的使用实例5
复制代码代码如下所示:
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(接口型);
}
}