类与接口

use*_*312 2 c# interface class

最近我在接受采访时被问到,接口是否可以被视为C#中的一个类?即接口是C#中的一个类?

我很困惑.

答案是什么?

Sea*_*ean 8

不,接口不是类.

接口是一组方法签名以及可能与单个想法相关的属性.例如,IList接口将具有索引,插入和获取元素数量的方法.但是,它没有定义任何实现细节.列表接口可以实现为链接列表,包装数组或任何您想要的,只要它在接口中定义这些方法即可.

类是用于创建实际对象的模板.类是方法签名的集合,以及这些方法的实现.

所以不,接口不是类,因为它只定义了一个特定的契约,而一个类定义了对象的整个行为.

Commenter SquareCog准确地指出上述情况并非完全正确.由于类可以被子类化,并且方法被重写,因此类与对象的实际行为的关系变得更加复杂.我只是通过说类是个体实体来解决这个问题.您可以阅读类的源代码并了解该类包含的行为.但是,在运行时,对象具有类型而不是类.类型是整个继承树,而不是单个类,因此可以在几个不同的类上定义类型的行为.幸运的是,这并没有改变接口是可以暗示(通过名称,参数类型等)某些实现的契约的基本概念差异,但是除了方法签名之外不能强制执行任何操作,而类确实定义了一个实现,即使这不是运行时使用的实际实现.