c# - 类与接口(interface)

标签 c# class interface

最近我在采访中被问到,接口(interface)可以被视为C#中的类吗? IE。接口(interface)是 C# 中的类吗?

我很困惑。

答案是什么?

最佳答案

不,接口(interface)不是类。

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

类是创建实际对象的模板。类是方法签名的集合,加上这些方法的实现。

所以不,接口(interface)不是类,因为它仅仅定义了一个特定的契约,而类定义了对象的整个行为。

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

关于c# - 类与接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1338421/

相关文章:

c# - 选择 ID 在 int 数组中的实体 - WCF 数据服务,LINQ

c# - 反序列化复杂对象中的 xml

java - 在java接口(interface)声明中使用模板参数

java - 如何在 Android 中使用一个接口(interface)与多个类

java - Mockito:是否可以将 mock 与方法名称结合起来在 when() 调用中创建 methodCall?

python - 在 Python 中强制函数参数类型?

c# - 如何在运行时将文件注入(inject) EXE 并在程序运行期间引用该文件?

c# - sql大数据读取

java - 在 Java 中访问类中的字段

c# - 在 C# 中编写多个构造函数重载的最佳方法