Pergunta

Eu estou querendo saber se existem diferenças para as classes derivadas quando se utiliza abstrato vs classes de reais para a herança?

Parece-me que a herança de classes real cria uma hierarquia enquanto herança de classe abstrata é simplesmente copiar e colar o código para o compilador para classes derivadas?

Será que a classe abstrata cria uma hierarquia? ele pode ser acessado usando uma palavra-chave especial?

Eu sei que você usa a palavra-chave base para acessar a classe base, mas os membros abstratos são parecidos com os membros originais nas classes derivadas?

Por fim, qual é a diferença de desempenho entre o 2?

Foi útil?

Solução

Sim, a classe abstrata existe - o compilador não faz um copiar e colar. Você não vai encontrar nenhuma diferença de desempenho embora como o CLR deve ainda fazer chamadas de método virtual.

Por exemplo a seguir C #:

abstract class Foo { }

class Bar : Foo { }

gera a seguinte IL:

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

.class private auto ansi beforefieldinit Bar
    extends Foo { }

O conceito de um tipo abstrato é uma parte muito importante da IL.

Outras dicas

A única diferença é que uma classe base abstrata não pode ser instanciado sem ser derivada, enquanto uma lata não-abstrato. Do ponto de vista de uma classe derivada, tudo é o mesmo.

Sumário classes e classes concretas são ferramentas para (OO) modelagem. Não há diferença no que diz respeito às regras de herança e de substituição. Existem alguns aspectos técnicos:

  • Uma classe abstrata não pode ser instanciado
  • Sumário métodos são só é permitido em classes abstratas

Mas uma classe abstrata pode ter não-abstratos métodos, propriedades e campos.

O desempenho não está relacionado com as aulas, mas há uma pequena penalidade por métodos abstratos / virtuais.

O poder da classe abstrata está nele unimplementation. Ele pode ser usado para a confiança que instância de classes derivadas terão a funcionalidade necessária completo

Abstract classe é uma forma primitiva de uma classe base. Estes não podem ser instanciado que significa que o desenvolvedor tem que derivam destas classes para usar sua funcionalidade. Qualquer método abstrato definido na classe abstrata deve ser implementado em sua classe criança. Assim, pode-se implementar métodos que devem estar presentes na classe filha que deriva da classe abstrata. Então você definir elementos básicos de um objeto que pode ser personalizado pelo desenvolvedor em uma classe derivada como ele agrada.

classes não abstratas são mais utilizados para estender uma functioanlity classe ao mesmo tempo, continuar a usar o que está na classe não-abstrata. Todos os membros não-privados e métodos podem ser acessados ??pela classe derivada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top