我想知道如果有任何差异的来源类别时使用的抽象vs实类继承?

它看起来对我像真的类继承创建一个层次结构而抽象的类继承的只是制代码编译器衍生的课?

没有抽象的类创建一个层次结构?它可以访问使用一种特殊的关键字?

我知道,你用的基础的关键词以访问基类,但是抽象的成员看起来就像原来的成员在得出类?

最后,什么是业绩之间的差2?

有帮助吗?

解决方案

是的,抽象类确实存在 - 编译器不进行复制粘贴。您将找不到任何性能差异,因为CLR仍然必须进行虚方法调用。

例如以下C#:

abstract class Foo { }

class Bar : Foo { }

生成以下IL:

.class private abstract auto ansi beforefieldinit Foo
    extends [mscorlib]System.Object { }

.class private auto ansi beforefieldinit Bar
    extends Foo { }

抽象类型的概念是IL的一部分。

其他提示

唯一的区别是抽象基类在没有派生的情况下无法实例化,而非抽象基类可以。从派生类的角度来看,一切都是一样的。

抽象的类别和具体的课程两者的工具(OO)建模。没有任何差别方面的继承和取代规则。有几个技术性问题:

  • 一个抽象的类不能 实例
  • 抽象的方法 只允许在摘要类

但是一个抽象的类可以有非抽象的方法、特性和领域。

性能是不相关的课程,但有一个小的刑罚为抽象/虚拟方法。

抽象类的力量在于它的实现。它可用于确保派生类的实例具有完整的所需功能

抽象类是基类的原始形式。这些无法实例化,这意味着开发人员必须从这些类派生才能使用其功能。抽象类中定义的任何抽象方法都必须在其子类中实现。因此,可以实现必须存在于派生自抽象类的子类中的方法。 因此,您可以定义一个对象的基本元素,这些元素可以由开发人员根据自己的喜好自定义。

非抽象类最好用于扩展类函数,同时还继续使用非抽象类中的内容。派生类可以访问所有非私有成员和方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top