接口变量申明问题

hum007 2012-07-08 11:28:40
IAOIBookmark bookmark1 = new AOIBookmarkClass();
IAOIBookmark bookmark2;

如题,两种方法都可以创建一个IAOIBookmark接口的变量,并且通过变量名打点的方式都可以得到IAOIBookmark接口下的方法和属性,这两种申明方法的区别是什么,什么时候用第一个,什么时候用第二个,请指教,菜鸟提问大神包涵~~~~
...全文
293 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
eric_sense 2013-03-28
  • 打赏
  • 举报
回复
请问使用该接口要调用哪个类
夜色镇歌 2012-07-09
  • 打赏
  • 举报
回复
先看看接口是干什么用的 再来看这个问题吧

IAOIBookmark bookmark2; 只有这句是没什么实际意义的

因为接口本来就是定义一种契约 定义了一大堆 没实现的方法属性什么的
YapingXin 2012-07-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
IAOIBookmark bookmark1 = new AOIBookmarkClass();
IAOIBookmark bookmark2;
如题,两种方法都可以创建一个IAOIBookmark接口的变量,并且通过变量名打点的方式都可以得到IAOIBookmark接口下的方法和属性,这两种申明方法的区别是什么,什么时候用第一个,什么时候用第二个,请指教,菜鸟提问大神包涵~~~~
[/Quote]


IAOIBookmark bookmark1 = new AOIBookmarkClass();
这个,是申明了一个接口变量并初始化为一个实际的类。

IAOIBookmark bookmark2;
这个仅仅是申明了一个接口变量,没有初始化。


IAOIBookmark bookmark1 = new AOIBookmarkClass();
这个bookmark1是你拿过来就可以直接用的

IAOIBookmark bookmark2;
这个你还不能直接用,虽然你可以看到它有一些方法,但那只是个申明,没有实际的执行体的。
emailtome 2012-07-09
  • 打赏
  • 举报
回复
接口就是一种协议形式来看 第一种 用的比较少 第二种 用的比较多
贫僧不戒色 2012-07-09
  • 打赏
  • 举报
回复
实例化
hum007 2012-07-09
  • 打赏
  • 举报
回复
同一类中的接口可以用过QI(接口查询),转换接口用的关键字是as,但不同类中的接口可以使用强制转换吗?就是形如:IAOIBookmark bookmark1=(IAOIBookmark )bookmark2,这个bookmark2是其他类中的一个已经申明了的接口变量
孤独的占星师 2012-07-08
  • 打赏
  • 举报
回复
你写的第一种方式可以称之为“父类的对象指向子类的引用”,这种方式分配的对象即可以调用子类中的方法,也可以调用父类中的方法(当然你这种情况的父类是接口不存在可以调用的方法)。说的明白一点,就是第一种就是分配了一个AOIBookmarkClass类的一个对象。
至于第二种方式其实只是定义了一个IAOIBookmark接口的对象,但是没有实例化(当然接口也无法实例化,要实例化也只能像第一种方式一样,指向子类)。这种对象无法直接使用,需要使用的时候还是需要实例化的
devmiao 2012-07-08
  • 打赏
  • 举报
回复
第一个代码等价:
IAOIBookmark bookmark1;
bookmark1 = new AOIBookmarkClass();
就好比
int i = 1;
等价
int i;
i = 1;
如果你需要在定义一个对象的时候创建一个实例,就用第一个方法,简单。
否则,如果你需要的对象来自另一个引用变量,或者函数的返回值,就用第2个。
zhujiawei7 2012-07-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
但是为什么第二种方法bookmark2打点之后也会有IAOIBookmark接口下的属性和方法
[/Quote]

点出东西来,只是让你知道这个接口有哪些成员,并不代表你可以使用。
第2种方式,只是申明了一个接口变量,但没有实际的接口对象。你运行代码的时候会报空指针异常。
int i;
string str;
同理,也会报错。
devmiao 2012-07-08
  • 打赏
  • 举报
回复
那当然。
就好比 int i;
i也能点出东西呢。
hum007 2012-07-08
  • 打赏
  • 举报
回复
但是为什么第二种方法bookmark2打点之后也会有IAOIBookmark接口下的属性和方法

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧