C#指南,重温基础,展望远方!(9)C#接口
2024-10-21 19:53:40
接口定义了可由类和结构实现的协定。 接口可以包含方法、属性、事件和索引器。 接口不提供所定义的成员的实现代码,仅指定必须由实现接口的类或结构提供的成员。
接口可以采用多重继承。 在以下示例中,接口 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
最新文章
- redis技巧--IP地址查询对应城市
- 改善SQL语句(转)
- 使用 Wireshark 调试 HTTP/2 流量
- Javascript模块化编程笔记
- 获取MAC地址的几种方式
- python学习-day03:整形、字符串常用方法:
- 二项堆(一)之 图文解析 和 C语言的实现
- Java 循环语句之多重循环
- 检测MYSQL不同步发邮件通知的脚本
- perl 脚本测试
- JNI-使用RegisterNatives注册本地方法
- js深入研究之Person类案例
- OC与Swift混编
- Unity 2D 跑酷道路动起来
- (大数据工程师学习路径)第二步 Vim编辑器----高级功能入门
- Realm数据库的简单介绍和使用
- DAY 22初识面向对象
- vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。
- CEPH LIO iSCSI Gateway
- string 线程安全
热门文章
- POJ2352【树状数组】
- 解决Visual Studio 2010 “无法导入以下密钥文件” 错误
- java 日期工具类
- 【layer】关于layer打开就是最大化的使用
- sqlserver锁机制详解(sqlserver查看锁)
- OpenCV定制化创建角点检测子
- flume和kafka整合(转)
- iOS:UIPageViewController翻页控制器控件详细介绍
- http://m.blog.csdn.net/article/details?id=49132747
- java设计模式1--工厂方法模式(Factory Method)