类继承了某接口,为啥该类的对象不能直接引用此接口的属性,非要强制类型转化下
类继承了某接口,为什么该类的对象不能直接引用此接口的属性,非要强制类型转化下?
我知道,对象可直接引用其基类的属性或方法,但要引用其类所继承接口的属性或方法,必须先强制转化为该接口,然后才能引用。但为什么就不能设计成为可以直接引用其类所继承接口的属性或方法呢?c#这样设计在实际应用中有什么用意呢?
------解决思路----------------------
一个类引用多个接口的时候,编译器不知道你要调用哪个接口的方法。所以要先转化一下,告诉编译器你要调用这个接口的方法。
好比一个人去参加比赛,他会游泳,也会打台球。但是他不说,别人也不知道呀。所以他需要先去报名游泳比赛,或者台球比赛,这样人们才知道他会干啥,才会让他比赛。
否则不能默认每个人啥都会吧?
------解决思路----------------------
需要强行转化为接口才能访问的叫显式实现,不需要转化为接口就可以访问的叫隐式实现
------解决思路----------------------
如果是显式实现接口,则需要先转成接口,再使用,这种方式可以兼容当实现多个接口时,有相同成员的情况.
楼主只实现了一个接口或者多个接口无冲突的话,可以不显式实现,这样就可以直接用了,相当于调用自身方法和属性.
我知道,对象可直接引用其基类的属性或方法,但要引用其类所继承接口的属性或方法,必须先强制转化为该接口,然后才能引用。但为什么就不能设计成为可以直接引用其类所继承接口的属性或方法呢?c#这样设计在实际应用中有什么用意呢?
------解决思路----------------------
一个类引用多个接口的时候,编译器不知道你要调用哪个接口的方法。所以要先转化一下,告诉编译器你要调用这个接口的方法。
好比一个人去参加比赛,他会游泳,也会打台球。但是他不说,别人也不知道呀。所以他需要先去报名游泳比赛,或者台球比赛,这样人们才知道他会干啥,才会让他比赛。
否则不能默认每个人啥都会吧?
------解决思路----------------------
需要强行转化为接口才能访问的叫显式实现,不需要转化为接口就可以访问的叫隐式实现
Interface IDemo
{
void Test();
}
class DemoA:IDemo//隐式实现,不需要转化为接口既可以访问
{
public void Test(){}
}
class DemoB:IDemo//显式实现,需要转化为接口才可以访问
{
public void IDemo.Test(){}
}
------解决思路----------------------
如果是显式实现接口,则需要先转成接口,再使用,这种方式可以兼容当实现多个接口时,有相同成员的情况.
楼主只实现了一个接口或者多个接口无冲突的话,可以不显式实现,这样就可以直接用了,相当于调用自身方法和属性.