Como: Definir propriedades abstratas (guia de programação translation from VPE for Csharp)

O exemplo a seguir mostra como definir Resumo propriedades.Uma declaração de propriedade abstract não fornece uma implementação de acessadores de propriedade – ele declara que a classe oferece suporte a propriedades, mas deixa a implementação do acessador para classes derivadas.O exemplo a seguir demonstra como implementar abstratas propriedades herdadas de uma classe base.

Este exemplo consiste em três arquivos, cada um deles é compilada individualmente e seu assembly resultante for referenciada pela próxima compilação:

  • abstractshape.cs: the Shape classe que contém um resumo Area propriedade.

  • Shapes.cs: As subclasses do Shape classe.

  • shapetest.cs: Um programa de teste para exibir as áreas de alguns Shape-objetos derivados.

Para compilar o exemplo, use o seguinte comando:

csc abstractshape.cs shapes.cs shapetest.cs

Isso criará shapetest.exe arquivo executável.

Exemplo

Este arquivo declara o Shape classe que contém o Area propriedade do tipo double.

// compile with: csc /target:library abstractshape.cs
public abstract class Shape
{
    private string name;

    public Shape(string s)
    {
        // calling the set accessor of the Id property.
        Id = s;
    }

    public string Id
    {
        get
        {
            return name;
        }

        set
        {
            name = value;
        }
    }

    // Area is a read-only property - only a get accessor is needed:
    public abstract double Area
    {
        get;
    }

    public override string ToString()
    {
        return Id + " Area = " + string.Format("{0:F2}", Area);
    }
}
  • Modificadores na propriedade são colocados na própria declaração de propriedade.Por exemplo:

    public abstract double Area
    
  • Ao declarar uma propriedade abstrata (por exemplo, Area Neste exemplo), você simplesmente indica que sistema autônomo acessadores da propriedade estão disponível, mas não sistema autônomo implemente. Neste exemplo, somente um obter acessador estiver disponível, portanto, a propriedade é somente leitura.

O código a seguir mostra três subclasses de Shape e como substituir o Area propriedade para fornecer sua própria implementação.

// compile with: csc /target:library /reference:abstractshape.dll shapes.cs
public class Square : Shape
{
    private int side;

    public Square(int side, string id)
        : base(id)
    {
        this.side = side;
    }

    public override double Area
    {
        get
        {
            // Given the side, return the area of a square:
            return side * side;
        }
    }
}

public class Circle : Shape
{
    private int radius;

    public Circle(int radius, string id)
        : base(id)
    {
        this.radius = radius;
    }

    public override double Area
    {
        get
        {
            // Given the radius, return the area of a circle:
            return radius * radius * System.Math.PI;
        }
    }
}

public class Rectangle : Shape
{
    private int width;
    private int height;

    public Rectangle(int width, int height, string id)
        : base(id)
    {
        this.width = width;
        this.height = height;
    }

    public override double Area
    {
        get
        {
            // Given the width and height, return the area of a rectangle:
            return width * height;
        }
    }
}

O código a seguir mostra um programa de teste que cria um número de Shape-derivada objetos e imprime suas áreas.

// compile with: csc /reference:abstractshape.dll;shapes.dll shapetest.cs
class TestClass
{
    static void Main()
    {
        Shape[] shapes =
        {
            new Square(5, "Square #1"),
            new Circle(3, "Circle #1"),
            new Rectangle( 4, 5, "Rectangle #1")
        };

        System.Console.WriteLine("Shapes Collection");
        foreach (Shape s in shapes)
        {
            System.Console.WriteLine(s);
        }
    }
}
/* Output:
    Shapes Collection
    Square #1 Area = 25.00
    Circle #1 Area = 28.27
    Rectangle #1 Area = 20.00
*/

Consulte também

Tarefas

Como: Criar e usar DLLs translation from VPE for Csharp (guia de programação translation from VPE for Csharp)

Conceitos

Guia de Programação C#

Referência

Classes e estruturas (guia de programação translation from VPE for Csharp)

Abstrato e Sealed classes e membros de classe (guia de programação C#)

Propriedades (Guia de programação do C#)