C# abstract 和 interface 区别
-
抽象类主要用来提供多个派生类可共享的基类的公共定义,它与非抽象类的主要区别如下:
抽象类不能直接实例化。
抽象类中可能包含抽象成员,但非抽象类中不可以。
抽象类不能被密封。
-
接口具有以下特征
接口类类似于抽象基类,继承接口的任何非抽象类型都必须实现接口的所有成员。
不能直接实例化接口。
接口可以包含事件,索引器,方法和属性。
接口不能不包含方法的实现。
类和结构可从多个接口继承。
接口自身可从多个接口继承。
-
抽象类和接口的区别主要有一下几点:
它们的派生类只能继承一个基类,既只能直接继承一个抽象类,但可以继承任意多个接口。
抽象类中可以定义成员的实现,但接口中不可以。
抽象类中可以包含字段,构造函数,析构函数,静态成员或常量等,接口中不可以。
抽象类中的成员可以是私有的(只要他们不是抽象的),受保护的,内部的或受保护的内部成员(受保护的内部成员只能在应用程序的代码或派生类中访问),接口中的成员必须是公共的。