C#接口实现方法实例分析
本文实例讲述了c#接口实现方法。分享给大家供大家参考。具体如下:
在讲解c#实现接口的实例解析之前我们来看看c#接口的定义,如果一个类派生于一个接口,它就会执行某些函数。并不是所有的面向对象语言都支持接口,所以本节将详细介绍c#实现接口的问题。
c#实现接口注意:
熟悉com的开发人员应注意,尽管在概念上c#接口类似于com接口,但它们是不同的,底层的结构不同,例如,c#接口并不派生于iunknown。c#接口根据.net函数提供了一个契约。与com接口不同,c#接口不代表任何类型的二进制标准。
下面列出microsoft预定义的一个接口system.idisposable的完整定义。idisposable包含一个方法dispose(),该方法由类执行,用于清理代码:
public interface idisposable { void dispose(); }
上面的代码说明,声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。一般情况下,接口中只能包含方法、属性、索引器和事件的声明。
c#实现接口中不能实例化接口,它只能包含其成员的签名。接口不能有构造函数(如何构建不能实例化的对象)或字段(因为这隐含了某些内部的执行方式)。接口定义也不允许包含运算符重载,但这不是因为声明它们在原则上有什么问题,而是因为接口通常是公共契约,包含运算符重载会引起一些与其他.net 语言不兼容的问题,例如与vb.net的不兼容,因为vb.net不支持运算符重载。
在接口定义中还不允许声明成员上的修饰符。接口成员总是公共的,不能声明为虚拟或静态。如果需要,就应由执行的类来声明,因此最好通过执行的类来声明访问修饰符,就像上面的代码那样。
例如idisposable。如果类希望声明为公共类型,以便执行方法dispose(),该类就必须执行idisposable。在c#中,这表示该类派生于idisposable。
class 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特性。
c#实现接口注意:
idisposable是一个相当简单的接口,它只定义了一个方法。大多数接口都包含许多成员。
接口的另一个例子是c#中的foreach循环。实际上,foreach循环的内部工作方式是查询对象,看看它是否实现了 system.collections.ienumerable接口。如果是,c#编译器就插入il代码,使用这个接口上的方法迭代集合中的成员,否则,foreach就会引发一个异常。
希望本文所述对大家的c#程序设计有所帮助。