2011-03-14 181 views
4

C#中的抽象类和接口类有什么不同?C#中的抽象类和接口类有什么不同?

+2

接口不是一个类,我猜.. – 2011-03-14 07:58:58

+1

伟大的面试问题 – RobS 2011-03-14 08:00:35

+0

可能是有用的http://stackoverflow.com/questions/10443344/when-to-use-abstract-classes-and-interfaces/10443530 #10443530 – 2012-05-15 12:13:23

回答

1

一个类可以实现多个接口,但只能从一个抽象类继承。

抽象类可以为其方法提供实现。一个接口不能提供实现。

1

谷歌“抽象类VS界面”,你会得到很多解释性的文章...

+0

相同..:D – 2011-03-14 08:29:57

0

一个类可以实现多个 接口,但只能从 继承一个抽象类。

此外,抽象类可能定义了一些函数,但接口不会有任何函数定义,并且派生类必须定义它们全部。

8

接口不是类,这是合同只是一个定义公众成员类必须实现。

抽象类只是一个类,从中你不能创建实例。通常你会用它来定义一个基类,它定义了虚拟方法的衍生类来实现。

+0

使用“合同”一词时要小心,因为合同通常比'定义'强得多。合同会给予保证,比如实现永远不会返回null,或者永远不会抛出异常。仍然+为此。 – Steven 2011-03-14 10:15:52

+0

它确实提供保证。它提供了确保某些方法将存在的保证,无论具体类型是什么(只要具体类型实现接口)。一个类型系统基本上是一组特定的,编纂的合同。事实上,你可以在类型系统中编码非无效和非异常抛出 - 它们仍然是合约。 – ICR 2011-03-14 10:49:22

1

接口级别高于抽象级别。
当你在设计strcuture时,画出uml,你应该使用界面。
当你实现时,你应该使用抽象来提取重复的东西。

无论如何,不​​同的是不仅仅是一个语法问题。
希望它有帮助。

0

我会通过使用解释这一点。当只有一个层次结构时可以使用抽象类,另外没有默认实现;而接口可以跨层次使用(水平),通常称为行为。

接口也是一个抽象,并在C#中替代多个类的继承,所以这可能会令人困惑,但你必须区分何时使用什么。

希望这有助于 罗伯特

0

一个抽象类的目的是为如何了一组派生类将工作,然后让程序员以填补执行派生类的基类定义。 当我们创建一个接口时,我们基本上创建了一组方法,而没有任何必须被实现的类覆盖的实现。其优点是它为类提供了一种方法,使其成为两个类的一部分:一个来自继承层次结构,另一个来自接口。