c#显式实现接口函数时为什么不用写public,非显式实现时就要写public?
classTeacher:IBascketPlayerable,ICarable{voidICarable.Car()//显式实现{Console.WriteLine("...
class Teacher : IBascketPlayerable,ICarable
{
void ICarable. Car() //显式实现
{
Console.WriteLine("老师车");;
}
}
也可以写成 public void Car( ) ,这个为何就要写public了不然就会报错。 展开
{
void ICarable. Car() //显式实现
{
Console.WriteLine("老师车");;
}
}
也可以写成 public void Car( ) ,这个为何就要写public了不然就会报错。 展开
2个回答
展开全部
这是显示实现的接口,只能通过接口来访问,也就是:ICarable ic = new Teacher();ic.Car();而不能用Teacher t = new Teacher();t.Car();这样就会报错,如果你在前面加上public修饰,则与显式实现的目标相冲突,这种显示实现,如果一定要通过类来访问就这样:Teacher t = new Teacher();(t as ICarable).Car();
而如果隐式实现写成:public void Car(){};这样既可以通过接口访问也可以通过类访问。
显示实现的好处是:当一个类继承多个接口时,而第个接口又包含有相同的方法签名,则可以通过显示实现接口很明显的区别出每个方法属于哪个接口。
而如果隐式实现写成:public void Car(){};这样既可以通过接口访问也可以通过类访问。
显示实现的好处是:当一个类继承多个接口时,而第个接口又包含有相同的方法签名,则可以通过显示实现接口很明显的区别出每个方法属于哪个接口。
展开全部
这。。。显示实现下,明确了是实现的接口的函数;
接口的函数都是公共的;所以。。。。其实也有public只是你没写而已,编译会自动加上
接口的函数都是公共的;所以。。。。其实也有public只是你没写而已,编译会自动加上
追问
写void Car( ) ,系统也识别到知道它是 接口ICarable的函数了,为什么就不能和显示实现那样编译自动添加上public呢,非要自己手写。
追答
额。。。这。。。。
object i = 1;
int j = i;
为什么在把 i 赋值给 j 的时候不加 显式类型转换 就会编译出错。。。。。。。。。。
编译器只有基本规则,他逻辑性能强到什么程度咱们说了不算
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询