Gewusst wie: Definieren von abstrakten Eigenschaften (C#-Programmierhandbuch)How to: Define Abstract Properties (C# Programming Guide)

Das folgende Beispiel veranschaulicht, wie Sie abstrakte Eigenschaften definieren:The following example shows how to define abstract properties. Eine abstrakte Eigenschaftendeklaration stellt keine Implementierung des Eigenschaftenaccessors bereit, sondern deklariert, dass die Klasse Eigenschaften unterstützt, die Accessorenimplementierung jedoch abgeleiteten Klassen überlässt.An abstract property declaration does not provide an implementation of the property accessors -- it declares that the class supports properties, but leaves the accessor implementation to derived classes. Das folgende Beispiel veranschaulicht das Implementieren von abstrakten Eigenschaften, die von einer Basisklasse geerbt wurden.The following example demonstrates how to implement the abstract properties inherited from a base class.

Dieses Beispiel besteht aus drei Dateien, von denen jede einzeln kompiliert wird, und auf die daraus entstehende Assembly von der nächsten Kompilierung verwiesen wird.This sample consists of three files, each of which is compiled individually and its resulting assembly is referenced by the next compilation:

  • abstractshape.cs: die Shape-Klasse, die eine abstrakte Area-Eigenschaft enthält.abstractshape.cs: the Shape class that contains an abstract Area property.

  • shapes.cs: die Unterklassen der Shape-Klasse.shapes.cs: The subclasses of the Shape class.

  • shapetest.cs: ein Testprogramm zum Anzeigen der Bereiche einiger abgeleiteten Shape-Objekte.shapetest.cs: A test program to display the areas of some Shape-derived objects.

Verwenden Sie den folgenden Befehl, um das Beispiel zu kompilieren:To compile the example, use the following command:

csc abstractshape.cs shapes.cs shapetest.cs

Dadurch wird die ausführbare Datei „shapetest.exe“ erstellt.This will create the executable file shapetest.exe.

BeispielExample

Diese Datei deklariert die Shape-Klasse, die die Area-Eigenschaft des Typs double enthält.This file declares the Shape class that contains the Area property of the type 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);
    }
}
  • Modifizierer der Eigenschaft sind in der Deklaration der Eigenschaft selbst platziert.Modifiers on the property are placed on the property declaration itself. Zum Beispiel:For example:

    public abstract double Area  
    
  • Wenn Sie eine abstrakte Eigenschaft deklarieren (z.B. Area in diesem Beispiel), geben Sie lediglich an, welche Eigenschaftenaccessoren verfügbar sind, implementieren diese jedoch nicht.When declaring an abstract property (such as Area in this example), you simply indicate what property accessors are available, but do not implement them. In diesem Beispiel ist nur ein get-Accessor verfügbar, die Eigenschaft ist also schreibgeschützt.In this example, only a get accessor is available, so the property is read-only.

BeispielExample

Der folgende Code zeigt drei Unterklassen von Shape und wie sie die Area-Eigenschaft überschreiben, um ihre eigene Implementierung bereitzustellen.The following code shows three subclasses of Shape and how they override the Area property to provide their own implementation.

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

BeispielExample

Der folgende Code zeigt ein Testprogramm, das eine Reihe abgeleiteter Shape-Objekte erstellt und deren Bereiche ausdruckt.The following code shows a test program that creates a number of Shape-derived objects and prints out their areas.

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

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
Klassen und StrukturenClasses and Structs
Abstrakte und versiegelte Klassen und KlassenmemberAbstract and Sealed Classes and Class Members
EigenschaftenProperties
Gewusst wie: Erstellen und Verwenden von Assemblys über die BefehlszeileHow to: Create and Use Assemblies Using the Command Line