黑马程序员技术交流社区
标题:
C#中的接口问题~~求解
[打印本页]
作者:
刘煜
时间:
2012-7-16 00:07
标题:
C#中的接口问题~~求解
C#中接口的显示实现和隐式实现有什么区别啊?
作者:
李朋霏
时间:
2012-7-16 00:24
继承接口有两种实现方式:
A:显示实现接口,B:(隐式)实现接口
interface IAnimal {
string Add(string name);
string Delete(string name);
}
class Dog:IAnimal
{
#region IAnimal 成员
//隐式实现接口
public string Add(string name)
{
throw new Exception("The method or operation is not implemented.");
}
public string Delete(string name)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
#region IAnimal 成员
//显示实现接口
string IAnimal.Add(string name)
{
throw new Exception("The method or operation is not implemented.");
}
string IAnimal.Delete(string name)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
}
B:(隐式)实现接口
string name="aa";
Dog dy = new Dog();//隐式
dy.Add(name);
A:显示实现接口
Dog d = new Dog();//显示实现接口后调用方法
//需要进行类型转换
((IAnimal)d).Add(name);
作者:
冯大卫
时间:
2012-7-16 00:24
隐示实现对象声明为接口和类都可以访问到其行为,显示实现只有声明为接口可以访问。
如果两个接口中有相同的方法名,那么同时实现这两个接口的类,就会出现不确定的情形,在编写方法时,也不知道实现哪个接口的方法了。为解决这一问题,C#提供了显示接口实现技术,就是在方法名前加接口名称,用接口名称来限定成员。用“接口名.方法名()”来区分实现的是哪一个接口。
注意:显示接口实现时,在方法名前不能加任何访问修饰符。这种方式和普通方法不同,普通方法前不加访问修饰符,默认为私有的,而显式接口实现时方法前不加任何修饰符,默认为公有的,如果前面加上修饰符,会出现编译错误。
作者:
刘秋菊
时间:
2012-7-16 13:01
隐示实现接口和类都可以访问
显示实现只有接口可以访问。
举例:
public interface IReview
{
void GetReviews();
}
public class ShopReview :IReview
{
public void GetReviews(){}
}
这种方式是隐示实现:
IReview rv = new ShopReview();rv.GetReviews();
ShopReview rv = new ShopReview();rv.GetReviews();
都可以调用GetReviews这个方法。
还有一种方式是显示实现:
public interface IReview
{
void GetReviews();
}
public class ShopReview :IReview
{
void IReview.GetReviews(){}
}
通过这种方式的接口实现。GetReviews就只能通过接口来调用:
IReview rv = new ShopReview();rv.GetReviews();
下面的这种方式将会编译错误:
ShopReview rv = new ShopReview();rv.GetReviews();
作者:
侯茂绵
时间:
2012-7-17 15:46
隐式实现的话实现的方法属于实现的类的,可以直接通过类的对象访问。
显式实现的话方法是属于接口的,可以看成是寄托在类中实现的,访问这些方法时要先把对象转换成接口对象,然后通过接口对象调用。
作者:
许庭洲
时间:
2012-7-17 16:11
1,如果类或者结构要实现的是单个接口,可以使用隐式实现;
2,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2