Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I följande exempel visas hur du definierar abstrakta egenskaper. En abstrakt egenskapsdeklaration tillhandahåller inte någon implementering av egenskapsåtkomsterna – den deklarerar att klassen stöder egenskaper, men lämnar accessorimplementeringen till härledda klasser. I följande exempel visas hur du implementerar de abstrakta egenskaper som ärvts från en basklass.
Det här exemplet består av tre filer som var och en kompileras individuellt och den resulterande sammansättningen refereras till av nästa kompilering:
abstractshape.cs: klassen
Shapesom innehåller en abstraktAreaegenskap.shapes.cs: Underklasserna för klassen
Shape.shapetest.cs: Ett testprogram för att visa områdena för vissa
Shape-härledda objekt.
Kompilera exemplet med följande kommando:
csc abstractshape.cs shapes.cs shapetest.cs
Då skapas den körbara filen shapetest.exe.
Exempel
Den här filen deklarerar den Shape-klass som innehåller egenskapen Area av typen double.
// compile with: csc -target:library abstractshape.cs
public abstract class Shape
{
    public Shape(string s)
    {
        // calling the set accessor of the Id property.
        Id = s;
    }
    public string Id { get; set; }
    // Area is a read-only property - only a get accessor is needed:
    public abstract double Area
    {
        get;
    }
    public override string ToString()
    {
        return $"{Id} Area = {Area:F2}";
    }
}
Modifikatorer på egenskapen placeras i själva egenskapsdeklarationen. Till exempel:
public abstract double AreaNär du deklarerar en abstrakt egenskap (till exempel
Areai det här exemplet) anger du bara vilka egenskapsåtkomster som är tillgängliga, men implementerar dem inte. I det här exemplet finns bara en hämta-accessor tillgänglig, så egenskapen är skrivskyddad.
Följande kod visar tre underklasser av Shape och hur de åsidosätter egenskapen Area för att tillhandahålla sin egen implementering.
// 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)
    {
        _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)
    {
        _radius = radius;
    }
    public override double Area
    {
        get
        {
            // Given the radius, return the area of a circle:
            return _radius * _radius * Math.PI;
        }
    }
}
public class Rectangle : Shape
{
    private int _width;
    private int _height;
    public Rectangle(int width, int height, string id)
        : base(id)
    {
        _width = width;
        _height = height;
    }
    public override double Area
    {
        get
        {
            // Given the width and height, return the area of a rectangle:
            return _width * _height;
        }
    }
}
Följande kod visar ett testprogram som skapar ett antal Shape-härledda objekt och skriver ut sina områden.
// 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")
        ];
        Console.WriteLine("Shapes Collection");
        foreach (Shape s in shapes)
        {
            Console.WriteLine(s);
        }
    }
}
/* Output:
    Shapes Collection
    Square #1 Area = 25.00
    Circle #1 Area = 28.27
    Rectangle #1 Area = 20.00
*/