C#中接口的显式和隐式实现
来源:互联网 发布:db2和oracle sql语句 编辑:程序博客网 时间:2024/06/06 15:01
接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现。显示实现是通过使用接口的完全限定名来实现接口成员的。 使用显式接口成员执行体通常有两个目的: 1、因为显式接口成员执行体不能通过类的实例进行访问,这就可以从公有接口中把接口的实现部分单独分离开。如果一个类只在内部使用该接口,而类的使用者不会直接使用到该接口,这种显式接口成员执行体就可以起到作用。 2、显式接口成员执行体避免了接口成员之间因为同名而发生混淆。如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,这就必须要使用到显式接口成员执行体。如果没有显式接口成员执行体,那么对于名称和返回类型不同的接口成员,类也无法进行实现。 example: /// <summary> /// IGoodbye interface /// </summary> public interface IGoodbye { void Speak(); void Bye(); } /// <summary> /// IHello interface /// </summary> public interface IHello { void Speak(); } /// <summary> /// ISay interface /// </summary> public interface ISay { void Say(); } --------------------------------- /// <summary> /// 隐式接口实现 /// </summary> public class Hello : ISay, IHello { public Hello() { } public void Say() { Console.WriteLine("Say Hello"); } public void Speak() { Console.WriteLine("Speak Hello"); } } /// <summary> /// 显式接口实现 /// </summary> public class Speak : IHello, IGoodbye { public Speak() { } void IHello.Speak() { Console.WriteLine("Hello"); }
void IGoodbye.Speak() { Console.WriteLine("Good Bye"); } void IGoodbye.Bye() { Console.WriteLine("Bye-Bye"); } } ------------------------- 上面的显式实现,不能如此调用。 Speak speak = new Speak(); speak.Speak(); 这里是不成功的。 只能这么用: ((IHello)speak).Speak(); 或者这样调用: Speak speak = new Speak(); speak .Speak(); //错误:不同的方法 IHello control = speak ; control.Speak(); //调用 Speak的Speak方法 上述代码中对speak.Speak()的调用是错误的,因为speak 本身并没有提供这一方法。control.Speak( )是正确的调用方式。 注释:接口本身不提供所定义的成员的实现,它仅仅说明这些成员,这些成员必须依靠实现接口的类或其它接口的支持。 -------------- 而隐式实现,就可以直接调用。 Hello hello = new Hello(); hello.Say(); hello.Speak(); |
- C#中接口的显式和隐式实现
- C#中接口的显式和隐式实现
- C#中接口的显式和隐式实现
- C#中,接口的隐式实现和显示实现
- C#显式接口实现和隐式接口实现
- C#接口-显式接口和隐式接口的实现
- 【转】C#接口-显式接口和隐式接口的实现
- C#接口的显示实现和隐式实现
- C# 中 显示实现接口 与 隐式实现接口
- C#中接口的显式实现(EIMI)
- c#中实现接口与显式实现接口的区别
- C#的显式接口和隐式接口
- C#的显式接口和隐式接口
- C#的显式接口和隐式接口
- C#中显/隐式实现接口及其访问方法
- 一小段代码演示C#接口的类级别实现和显式接口成员实现
- C#接口隐式实现和显式实现的学习心得
- C#中的显式和隐式接口实现
- dbo与db_owner区别
- MTK平台手机的网络摄像头驱动程序
- windows下的域名解析
- SVN分组-----authz文件
- dvd ifo mpeg2-ps
- C#中接口的显式和隐式实现
- 康托尔、哥德尔、图灵——永恒的金色对角线
- SVN分组-----password文件
- SOA设计时间治理时代可能结束
- vs.2008中如何对抽象类私有方法进行单元测试
- sql CHARINDEX
- 如何学习英语??
- htm特殊字符总汇
- 比较两个日期相差几天