当前位置: 首页 > 编程笔记 >

C#接口实现方法实例分析

汤飞
2023-03-14
本文向大家介绍C#接口实现方法实例分析,包括了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#程序设计有所帮助。

 类似资料:
  • 本文向大家介绍C语言接口与实现方法实例详解,包括了C语言接口与实现方法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式详细讲述了C语言接口与实现方法,对于深入掌握C语言程序设计有一定的借鉴价值。分享给大家供大家参考。具体分析如下: 一般来说,一个模块有两部分组成:接口和实现。接口指明模块要做什么,它声明了使用该模块的代码可用的标识符、类型和例程,实现指明模块是如何完成其接口声明的目

  • Override Method可以实现接口方法也可以覆写父类的方法,但Implement Methods只能实现接口方法 操作步骤: 菜单栏: Code —> Implement Methods 快捷键: Mac: control + L Windows\/Linux: Ctrl + I

  • 本文向大家介绍Java接口定义与实现方法分析,包括了Java接口定义与实现方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java接口定义与实现方法。分享给大家供大家参考,具体如下: 在java中,我们可以通过继承得到另一个类中的方法,但是这个仅仅满足继承一个方法,那有办法可以多个继承不,就好比,我们人类的基因,总有一部分是继承爸爸,一部分是继承妈妈,而java中有是单继承,那我们

  • 良好软件工程的一个基本原则是将接口与实现方法分离,这样可以更容易修改程序。就类的客户而言,类实现方法的改变并不影响客户,只要类的接口保持不变即可(类的功能可能扩展到原接口以外)。 软件工程视点 6.10 将类声明放在使用该类的任何客户的头文件中,这就形成类的Public接口(并向客户提供调用类成员函数所需的函数原型)。将类成员函数的定义放在源文件中,这就形成类的实现方法。 软件工程视点 6.11

  • 我是C#新手,我不明白编译器为什么不抱怨这段代码。以下是类的层次结构: 执行代码: 执行时<代码>---- 当决定调用什么函数时--运行时还是编译时?如果我弄脏了一个新的< code>class CAble : IAble怎么办?

  • 问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种