C#实现接口的实例解析

开发 后端
C#实现接口是如何进行的?我们在定义接口以后是怎么样做到C#实现接口的呢?C#实现接口需要注意些什么呢?那么本文就向你介绍相关的内容。

C#实现接口的实例解析之前我们来看看C#接口的定义,如果一个类派生于一个接口,它就会执行某些函数。并不是所有的面向对象语言都支持接口,所以本节将详细介绍C#实现接口的问题。

C#实现接口注意:

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

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

  1. public interface IDisposable   
  2.  
  3. {  
  4.  
  5. void Dispose();  
  6.  
  7. }  

上面的代码说明,声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。一般情况下,接口中只能包含方法、属性、索引器和事件的声明。

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

在接口定义中还不允许声明成员上的修饰符。接口成员总是公共的,不能声明为虚拟或静态。如果需要,就应由执行的类来声明,因此***通过执行的类来声明访问修饰符,就像上面的代码那样。

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

  1. class SomeClass : IDisposable  
  2.  
  3. {  
  4.  
  5. // this class MUST contain an implementation of the   
  6.  
  7. // IDisposable.Dispose() method, otherwise  
  8.  
  9. // you get a compilation error  
  10.  
  11. public void Dispose()  
  12.  
  13. {  
  14.  
  15. // implementation of Dispose() method  
  16.  
  17. }  
  18.  
  19. // rest of class  
  20.  
  21. }  

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

C#实现接口注意:

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

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

C#实现接口的相关内容就向你介绍到这里,希望对你了解和学习C#实现接口有所帮助。

【编辑推荐】

  1. .Net水晶报表使用学习的九大步骤
  2. C#接口定义及实例应用浅析
  3. 详解C#接口以及实现
  4. C#接口的定义详解
  5. C#接口编程之接口成员浅析
责任编辑:仲衡 来源: tzwhx.com
相关推荐

2009-08-27 17:40:21

C#接口的作用

2009-08-31 17:30:10

C#接口的作用

2009-08-31 18:17:32

C#接口编程

2009-08-31 18:01:41

C#接口事件

2009-08-27 18:09:49

C#接口的实现

2009-09-03 17:23:45

C#发送邮件

2009-09-01 13:59:01

C#操作Excel

2009-09-07 03:58:42

WinForm传值

2009-09-01 16:59:25

C#画直线

2009-09-03 17:06:17

C#回车切换焦点

2009-09-02 16:14:21

C#动态创建数组

2009-08-27 17:59:56

C#接口定义

2009-09-09 14:40:15

C# XML解析

2009-08-31 17:47:43

C#接口使用

2009-09-07 06:31:32

C#窗体移动

2009-08-26 12:14:44

C#打印设置

2009-08-19 16:09:15

C#操作Access

2009-08-18 10:47:40

C#枚举类型

2009-09-09 13:57:28

C# XML解析

2009-08-31 15:55:17

C#实现Strateg
点赞
收藏

51CTO技术栈公众号