接口

翻译 2012年03月21日 13:36:54

 如果一个类派生于一个接口,它就会执行某些函数。并不是所有的面向对象语言都支持接口。

尽管在概念上C#接口类似于COM接口,但它们是不同的,底层的结构不同,例如,C#接口并不派生于IUnknown。C#接口根据.NET函数提供了一个契约。与COM接口不同,C#接口不代表任何类型的二进制标准。

 

下面列出Microsoft预定义的一个接口System.IDisposable的完整定义。IDisposable包含一个方法Dispose(),该方法由类执行,用于清理代码:

public interface IDisposable
{
void Dispose();
}

上面的代码说明,声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。

一般情况下,接口中只能包含方法、属性、索引器和事件的声明

不能实例化接口,它只能包含其成员的签名。接口不能有构造函数(如何构建不能实例化的对象?)或字段(因为这隐含了某些内部的执行方式)。接口定义也不允许包含运算符重载,但这不是因为声明它们在原则上有什么问题,而是因为接口通常是公共契约,包含运算符重载会引起一些与其他.NET语言不兼容的问题,例如与VB的不兼容,因为VB不支持运算符重载。

IDisposable。如果类希望声明为公共类型,以便执行方法Dispose(),该类就必须执行IDisposable。在C#中,这表示该类派生于IDisposable。

lass SomeClass : IDisposable
{
// this class MUST contain an implementation of the
// IDisposable.Dispose() method, otherwise
// you get a compilation error
public void Dispose()
{
// implementation of Dispose() method
}
// rest of class
}

在这个例子中,如果SomeClass派生于IDisposable,但不包含与IDisposable中签名相同的Dispose()实现代码,就会得到一个编译错误,因为该类破坏了实现IDisposable的契约。当然,编译器允许类有一个不派生于IDisposable的Dispose()方法。问题是其他代码无法识别出SomeClass支持IDisposable特性

注意:

IDisposable是一个相当简单的接口,它只定义了一个方法。大多数接口都包含许多成员。

接口的另一个例子是C#中的foreach循环。实际上,foreach循环的内部工作方式是查询对象,看看它是否实现了System.Collections.IEnumerable接口。如果是,C#编译器就插入IL代码,使用这个接口上的方法迭代集合中的成员,否则,foreach就会引发一个异常。

相关文章推荐

支付宝接口

  • 2017年11月15日 10:05
  • 41.8MB
  • 下载

使用wininet接口实现访问http服务

利用wininet接口实现访问http服务: #include "StdAfx.h" #include #pragma comment(lib,"wininet.lib") int main(...

银联实名认证接口规范及DEMO

  • 2017年11月01日 14:44
  • 4.39MB
  • 下载

Oracle EBS PO 采购订单接口 创建后 点击发运后 未修改任何数据 需要保存

Oracle EBS PO 采购订单接口 创建后 点击发运后 未修改任何数据 需要保存

大汉三通短信云接口手册

  • 2017年10月30日 10:10
  • 798KB
  • 下载

jmeter接口自动化环境搭建

  • 2017年10月25日 16:54
  • 511KB
  • 下载

Java+Selenium3方法篇2-Timeout接口相关方法介绍

这一篇介绍manage()接口下常用方法的使用。从Selenium的源码文件,可以知道,manage是得到Option这类接口用的。本文介绍的方法,都是在Option这个接口下面可以找到的。Optio...

GigE-Vision-接口标准详细版本

  • 2017年11月16日 09:06
  • 2.79MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:接口
举报原因:
原因补充:

(最多只允许输入30个字)