接口定义了可由类和结构实现的协定。 接口可以包含方法属性事件索引器。 接口不提供所定义的成员的实现代码,仅指定必须由实现接口的类或结构提供的成员。

接口可以采用多重继承。 在以下示例中,接口 IComboBox 同时继承自 ITextBox 和 IListBox

C#复制
interface IControl
{
void Paint();
}
interface ITextBox: IControl
{
void SetText(string text);
}
interface IListBox: IControl
{
void SetItems(string[] items);
}
interface IComboBox: ITextBox, IListBox {}

类和结构可以实现多个接口。 在以下示例中,类 EditBox 同时实现 IControl 和 IDataBound

C#复制
interface IDataBound
{
void Bind(Binder b);
}
public class EditBox: IControl, IDataBound
{
public void Paint() { }
public void Bind(Binder b) { }
}

当类或结构实现特定接口时,此类或结构的实例可以隐式转换成相应的接口类型。 例如

C#复制
EditBox editBox = new EditBox();
IControl control = editBox;
IDataBound dataBound = editBox;

如果已知实例不是静态地实现特定接口,可以使用动态类型显式转换功能。 例如,以下语句使用动态类型显式转换功能来获取对象的 IControl 和 IDataBound 接口实现代码。 因为对象的运行时实际类型是 EditBox,所以显式转换会成功。

C#复制
object obj = new EditBox();
IControl control = (IControl)obj;
IDataBound dataBound = (IDataBound)obj;

在前面的 EditBox 类中,IControl 接口中的 Paint 方法和 IDataBound 接口中的 Bind 方法均使用公共成员进行实现。C# 还支持显式接口成员实现代码,这样类或结构就不会将成员设为公共成员。 显式接口成员实现代码是使用完全限定的接口成员名称进行编写。 例如,EditBox 类可以使用显式接口成员实现代码来实现 IControl.Paint 和 IDataBound.Bind 方法,如下所示。

C#复制
public class EditBox: IControl, IDataBound
{
void IControl.Paint() { }
void IDataBound.Bind(Binder b) { }
}

显式接口成员只能通过接口类型进行访问。 例如,只有先将 EditBox 引用转换成 IControl 接口类型,才能调用上面 EditBox 类提供的 IControl.Paint 实现代码。

C#复制
EditBox editBox = new EditBox();
editBox.Paint(); // Error, no such method
IControl control = editBox;
control.Paint(); // Ok

最新文章

  1. redis技巧--IP地址查询对应城市
  2. 改善SQL语句(转)
  3. 使用 Wireshark 调试 HTTP/2 流量
  4. Javascript模块化编程笔记
  5. 获取MAC地址的几种方式
  6. python学习-day03:整形、字符串常用方法:
  7. 二项堆(一)之 图文解析 和 C语言的实现
  8. Java 循环语句之多重循环
  9. 检测MYSQL不同步发邮件通知的脚本
  10. perl 脚本测试
  11. JNI-使用RegisterNatives注册本地方法
  12. js深入研究之Person类案例
  13. OC与Swift混编
  14. Unity 2D 跑酷道路动起来
  15. (大数据工程师学习路径)第二步 Vim编辑器----高级功能入门
  16. Realm数据库的简单介绍和使用
  17. DAY 22初识面向对象
  18. vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。
  19. CEPH LIO iSCSI Gateway
  20. string 线程安全

热门文章

  1. POJ2352【树状数组】
  2. 解决Visual Studio 2010 “无法导入以下密钥文件” 错误
  3. java 日期工具类
  4. 【layer】关于layer打开就是最大化的使用
  5. sqlserver锁机制详解(sqlserver查看锁)
  6. OpenCV定制化创建角点检测子
  7. flume和kafka整合(转)
  8. iOS:UIPageViewController翻页控制器控件详细介绍
  9. http://m.blog.csdn.net/article/details?id=49132747
  10. java设计模式1--工厂方法模式(Factory Method)