接口

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

尽管在概念上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就会引发一个异常。

阅读更多
个人分类: C#从零开始
上一篇修饰符
下一篇java日期格式化
想对作者说点什么? 我来说一句

接口压力测试

2018年03月09日 9.54MB 下载

BS_API接口

2017年09月06日 359KB 下载

接口课件接口课件接口课件

2008年09月05日 6.49MB 下载

spring3mvc入门资料

2013年09月25日 452KB 下载

java 接口 java 接口java 接口

2010年08月04日 10KB 下载

定义搜索接口接口接口接口

2010年03月09日 50KB 下载

微机接口课件微机接口课件

2010年05月25日 1.69MB 下载

没有更多推荐了,返回首页

关闭
关闭