AO开发中QI(接口查询)非常重要,从某种意义上说不会QI就不会做AO开发。论坛中有很多关于QI的帖子,我想做个终结者。
我以一个竞走运动员和人实例来详细描述QI
1.首先我先定义三个接口:Izou(走),Ijingzou(竞走),iheshui(喝水)如下所示
interface Izou
{
void start();
void stop();
}
interface Ijingzou : Izou
{
void niupigu();
}
interface Iheshui
{
void heshui();
}
2.定义一个人类实现Izou(走)Iheshui(喝水)两个接口
class person : Izou, Iheshui
{
void Izou.start()
{
MessageBox.Show("开始走");
}
void Izou.stop()
{
MessageBox.Show("停止走");
}
void Iheshui.heshui()
{
MessageBox.Show("开始喝水");
}
}
3.定义一个运动员类继承于人类实现Ijingzou接口
class yundongyuan : person, Ijingzou
{
void Izou.start()
{
MessageBox.Show("开始走");
}
void Izou.stop()
{
MessageBox.Show("停止走");
}
void Ijingzou.niupigu()
{
MessageBox.Show("开始扭屁股");
}
}
ok定义完接口与类,接下来我给大家演示QI
1.实例化一个person类。
Izou pZou = new person();
pZou.start();
Ijingzou pJIngzou = pZou as Ijingzou;//进行QI
pJIngzou.niupigu();//将会出错如下图所示
为什么会出现这个错误是因为用new实例化了一个人,但是并不是所有的人都会竞走的也就是说Person这个类没有实现Ijingzou这个接口所以报错。所以做QI之前必须查看你实例化的类是不是实现了相关接口。
2.实例化一个yundongyuan
Izou pZou = new yundongyuan();
pZou.start();
Ijingzou pJIngzou = pZou as Ijingzou;
pJIngzou.niupigu();//将会执行如下图
通过实例化一个yundongyuan之后我就可以通过Izou接口直接QI到Ijingozu这个接口,然后执行Ijingozu接口所提供的方法这就是QI。
3.Ok我们现在我们再在第二部做个补充,运动员开始扭屁股竞走了,竞走运动员在竞走过程中太渴想喝水怎么办?痛过QI切换到Iheshui接口执行喝水方法即可,如下例
Izou pZou = new yundongyuan();
pZou.start();
Ijingzou pJIngzou = pZou as Ijingzou;
pJIngzou.niupigu();//将会执行
Iheshui pHeshui = pJIngzou as Iheshui;//QI到Iheshui接口
pHeshui.heshui();//运动员将喝水
综上是我给大家做的Demo演示以及讲解,如果大家还有不明白请留言。
http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=40058&highlight