Difference between abstract Class and Interface in C#
本问题已经有最佳答案,请猛点这里访问。
这篇文章说代码项目抽象类-可以有方法声明和方法定义。
但这篇文章说程序调用抽象-只能有方法声明。
我很困惑。有人能告诉我两者的确切区别是什么吗?
请参阅本文:
Multiple inheritance
一个类可以继承几个接口。
一个类只能继承一个抽象类。
Default implementation
接口不能提供任何代码,只能提供签名。
抽象类可以提供完整的默认代码和/或仅提供必须重写的详细信息。
Access Modfiers
接口不能具有子、函数、属性等的访问修饰符。一切都假定为公共的。抽象类可以包含子、函数、属性的访问修饰符。核心与外围
接口用于定义类的外围能力。换句话说,人和车辆都可以从一个可移动的接口继承。
抽象类定义了类的核心标识,并在那里用于相同类型的对象。
Homogeneity
如果各种实现只共享方法签名,那么最好使用接口。
如果各种实现类型相同,并且使用公共行为或状态,那么抽象类更适合使用。
Adding functionality (Versioning)
如果我们向接口添加一个新方法,那么我们必须跟踪接口的所有实现,并为新方法定义实现。
如果我们向抽象类添加一个新方法,那么我们可以选择提供默认实现,因此所有现有的代码都可以正常工作。
字段和常量在接口中不能定义任何字段抽象类可以定义字段和常量
接口更像是契约——它详细说明了在实现它的对象上可以找到什么方法或属性。
抽象类是一个基对象——它可以包含方法、变量和行为——但是您不能创建它的具体实现——您必须从它继承并扩展它的行为。
据我所知,抽象类已经可以实现某些方法或变量的值,只要它不实现所有方法或变量的值(这将使它成为普通类)。接口不能这样做;它只能提供方法和变量存根。