Поделиться через


Практическое руководство. Определение абстрактных свойств (Руководство по программированию в C#)

В следующем примере показано, как определить абстрактные свойства.Если объявление абстрактного свойства не предоставляет реализацию методов доступа к свойствам, оно объявляет, что класс поддерживает свойства, но оставляет реализацию метода доступа производному классу.В следующем примере показано, как реализовать абстрактные свойства, унаследованные от базового класса.

Этот пример состоит из трех файлов, каждый из которых компилируется отдельно, и на результирующую сборку которого ссылается следующая компиляция.

  • abstractshape.cs: класс Shape, содержащий абстрактное свойство Area.

  • shapes.cs: вложенные классы класса Shape.

  • shapetest.cs: Тестовая программа для отображения областей некоторых производных от Shape объектов.

Для компиляции примера используйте следующую команду:

csc abstractshape.cs shapes.cs shapetest.cs

Будет создан исполняемый файл shapetest.exe.

Пример

Этот файл объявляет класс Shape, содержащий свойство Area типа 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);
    }
}
  • Модификаторы свойства помещаются в самом объявлении свойства.Примеры.

    public abstract double Area
    
  • При объявлении абстрактного свойства (такого как Area в этом примере) просто указываются имеющиеся методы доступа к свойствам, и их реализация не выполняется.В этом примере имеется только метод доступа get, поэтому свойство доступно только для чтения.

В следующем коде показано три вложенных класса Shape и переопределение или свойства Area для предоставления собственной реализации.

// 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;
        }
    }
}

В следующем коде показана тестовая программа, создающая ряд производных от Shape объектов и печатающая их области.

// 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
*/

См. также

Задачи

Практическое руководство. Создание и использование сборок с помощью командной строки (C# и Visual Basic)

Ссылки

Классы и структуры (Руководство по программированию в C#)

Абстрактные и запечатанные классы и члены классов (Руководство по программированию на C#)

Свойства (Руководство по программированию в C#)

Основные понятия

Руководство по программированию на C#