Bagikan melalui


Cara mendefinisikan properti abstrak (Panduan Pemrograman C#)

Contoh berikut menunjukkan cara menentukan properti abstrak. Deklarasi properti abstrak tidak menyediakan implementasi pengakses properti -- akan tetapi mendeklarasikan bahwa kelas mendukung properti, tetapi membiarkan implementasi pengakses ke kelas turunan. Contoh berikut menunjukkan cara menerapkan properti abstrak yang diwarisi dari kelas dasar.

Sampel ini terdiri dari tiga file, yang masing-masing dikompilasi secara individual dan perakitan yang dihasilkan direferensikan oleh kompilasi berikutnya:

  • abstractshape.cs: kelas Shape yang berisi properti abstrak Area.

  • shapes.cs: Subkelas dari kelas Shape.

  • shapetest.cs: Program pengujian untuk menampilkan area dari beberapa objek turunan-Shape.

Untuk mengkompilasi contoh, gunakan perintah berikut:

csc abstractshape.cs shapes.cs shapetest.cs

Ini akan membuat file yang dapat dieksekusi shapetest.exe.

Contoh

File ini mendeklarasikan kelas Shape yang berisi properti Area dari jenis 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 = {Area:F2}";
    }
}
  • Pengubah pada properti ditempatkan pada deklarasi properti itu sendiri. Contohnya:

    public abstract double Area  
    
  • Saat mendeklarasikan properti abstrak (seperti Area dalam contoh ini), Anda cukup menunjukkan pengakses properti apa yang tersedia, tetapi tidak menerapkannya. Dalam contoh ini, hanya aksesor get yang tersedia, sehingga properti bersifat baca-saja.

Kode berikut menunjukkan tiga subkelas Shape dan bagaimana mereka menimpa properti Area untuk menyediakan implementasi sendiri.

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

Kode berikut menunjukkan program pengujian yang membuat sejumlah objek turunan-Shape dan mencetak areanya.

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

Lihat juga