Sunteți pe pagina 1din 4

19/09/2017 abstract (Referncia de C#) | Microsoft Docs

abstract (Referncia de C#)


3 minutos para ler Colaboradores

Neste artigo

Exemplo
Exemplo
Especificao da Linguagem C#
Consulte tambm

O modificador abstract indica que o item que est sendo modificado tem uma
implementao ausente ou incompleta. O modificador abstrato pode ser usado com classes,
mtodos, propriedades, indexadores e eventos. Use o modificador abstract em uma
declarao de classe para indicar que uma classe destina-se apenas a ser uma classe base de
outras classes. Membros marcados como abstratos ou includos em uma classe abstrata,
devem ser implementados por classes que derivam da classe abstrata.

Exemplo
Neste exemplo, a classe Square deve fornecer uma implementao de Area porque deriva
de ShapesClass :

C# Copiar

abstract class ShapesClass


{
abstract public int Area();
}
class Square : ShapesClass
{
int side = 0;

public Square(int n)
{
side = n;
}
// Area method is required to avoid
// a compile-time error.
public override int Area()
{
return side * side;
}

static void Main()

https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/abstract 1/4
19/09/2017 abstract (Referncia de C#) | Microsoft Docs

{
Square sq = new Square(12);
Console.WriteLine("Area of the square = {0}", sq.Area());
}

interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}

}
// Output: Area of the square = 144

As classes abstratas tm os seguintes recursos:

Uma classe abstrata no pode ser instanciada.

Uma classe abstrata pode conter acessadores e mtodos abstratos.

No possvel modificar uma classe abstrata com o modificador sealed porque os


dois modificadores tm significados opostos. O modificador sealed impede que
uma classe seja herdada e o modificador abstract requer uma classe a ser
herdada.

Uma classe no abstrata derivada de uma classe abstrata deve incluir


implementaes reais de todos os acessadores e mtodos abstratos herdados.

Use o modificador abstract em uma declarao de mtodo ou propriedade para indicar


que o mtodo ou propriedade no contem a implementao.

Os mtodos abstratos tm os seguintes recursos:

Um mtodo abstrato implicitamente um mtodo virtual.

Declaraes de mtodo abstrato so permitidas apenas em classes abstratas.

Como uma declarao de mtodo abstrato no fornece nenhuma implementao


real, no h nenhum corpo de mtodo, a declarao do mtodo simplesmente
termina com um ponto e vrgula e no h chaves ({ }) aps a assinatura. Por
exemplo:

Copiar

public abstract void MyMethod();

https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/abstract 2/4
19/09/2017 abstract (Referncia de C#) | Microsoft Docs

A implementao fornecida por um mtodo de substituio override, que um


membro de uma classe no abstrata.

um erro usar os modificadores static ou virtual em uma declarao de mtodo


abstrato.

Propriedades abstratas se comportam como mtodos abstratos, exceto pelas diferenas na


sintaxe de declarao e chamada.

um erro usar o modificador abstract em uma propriedade esttica.

Uma propriedade herdada abstrata pode ser substituda em uma classe derivada
incluindo uma declarao de propriedade que usa o modificador override.

Para obter mais informaes sobre classes abstratas, consulte Classes e membros de classes
abstratos e lacrados.

Uma classe abstrata deve fornecer uma implementao para todos os membros de interface.

Uma classe abstrata que implementa uma interface pode mapear os mtodos de interface
em mtodos abstratos. Por exemplo:

C# Copiar

interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}

Exemplo
Nesse exemplo, a classe DerivedClass derivada de uma classe abstrata BaseClass . A
classe abstrata contm um mtodo abstrato, AbstractMethod e duas propriedades abstratas,
X e Y .

C# Copiar

abstract class BaseClass // Abstract class


{
protected int _x = 100;
protected int _y = 150;
public abstract void AbstractMethod(); // Abstract method
public abstract int X { get; }
https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/abstract 3/4
19/09/2017 abstract (Referncia de C#) | Microsoft Docs

public abstract int Y { get; }


}

class DerivedClass : BaseClass


{
public override void AbstractMethod()
{
_x++;
_y++;
}

public override int X // overriding property


{
get
{
return _x + 10;
}
}

public override int Y // overriding property


{
get
{
return _y + 10;
}
}

static void Main()


{
DerivedClass o = new DerivedClass();
o.AbstractMethod();
Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
}
}
// Output: x = 111, y = 161

No exemplo anterior, se voc tentar instanciar a classe abstrata usando uma instruo como
esta:

Copiar

BaseClass bc = new BaseClass(); // Error

voc receber uma mensagem de erro informando que o compilador no pode criar uma
instncia da classe abstrata 'BaseClass'.

Especificao da Linguagem C#

https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/abstract 4/4

S-ar putea să vă placă și