Udostępnij za pośrednictwem


Jak: Definiowanie właściwości (Podręcznik programowania C#)

Poniższy przykład ilustruje sposób zdefiniować abstrakcyjna właściwości.Deklarację właściwości abstract nie dostarcza implementacja Akcesory właściwości--oświadcza, obsługuje właściwości tej klasy, ale pozostawia wdrożenie akcesor klas pochodnych.Poniższy przykład ilustruje sposób implementacji abstrakcyjna właściwości odziedziczonych z klasy bazowej.

Próbka ta składa się z trzech plików, z których każdy indywidualnie skompilowany i jego zestaw wynikowy odwołuje się dalej kompilacji:

  • abstractshape.cs: Shape klasa, która zawiera streszczenie Area właściwości.

  • Shapes.cs: podklasy Shape klasy.

  • shapetest.cs: program test, aby wyświetlić obszary niektórych Shape-pochodzących z obiektów.

Aby skompilować w przykładzie, polecenie:

csc abstractshape.cs shapes.cs shapetest.cs

Spowoduje to utworzenie shapetest.exe pliku wykonywalnego.

Przykład

Ten plik deklaruje Shape klasa, która zawiera Area właściwość typ 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);
    }
}
  • Modyfikatory właściwości są umieszczane na sam deklaracji właściwości.Na przykład:

    public abstract double Area
    
  • Deklarując abstrakcyjna właściwości (takich jak Area w tym przykładzie), można po prostu wskazują, jakie Akcesory właściwości są dostępne, ale nie należy implementować je.W tym przykładzie tylko uzyskać akcesor jest dostępna, więc właściwość jest tylko do odczytu.

Poniższy kod przedstawia trzy podklasy Shape i w jaki sposób zastąpić Area właściwość, aby zapewnić ich realizacji.

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

Poniższy kod przedstawia program test, który tworzy pewna liczba Shape-pochodzących z obiektów i drukuje ich obszary.

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

Zobacz też

Zadania

Jak: tworzenie i używanie zestawów przy użyciu wiersza polecenia (C# i Visual Basic)

Informacje

Klasy i strukturach (Podręcznik programowania C#)

Klasy abstrakcyjne i zamkniętych i elementy klas (Podręcznik programowania C#)

Właściwości (Podręcznik programowania C#)

Koncepcje

Podręcznik programowania C#