Aracılığıyla paylaş


Soyut özellikleri tanımlama (C# Programlama Kılavuzu)

Aşağıdaki örnekte soyut özelliklerin nasıl tanımlanacağı gösterilmektedir. Soyut özellik bildirimi özellik erişimcilerinin bir uygulamasını sağlamaz; sınıfın özellikleri desteklediğini bildirir, ancak erişimci uygulamasını türetilmiş sınıflara bırakır. Aşağıdaki örnekte temel sınıftan devralınan soyut özelliklerin nasıl uygulandığı gösterilmektedir.

Bu örnek, her biri ayrı ayrı derlenen ve sonuçta elde edilen derlemeye sonraki derleme tarafından başvurulan üç dosyadan oluşur:

  • abstractshape.cs: soyut bir Area özelliğini içeren Shape sınıfı.

  • shapes.cs: Sınıfın Shape alt sınıfları.

  • shapetest.cs: Bazı Shape türetilmiş nesnelerin alanlarını göstermek için bir test programı.

Örneği derlemek için aşağıdaki komutu kullanın:

csc abstractshape.cs shapes.cs shapetest.cs

Bu, shapetest.exeyürütülebilir dosyayı oluşturur.

Örnekler

Bu dosya, double türünün Area özelliğini içeren Shape sınıfını tanımlar.

// 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}";
    }
}
  • Özelliğindeki değiştiriciler özellik tanımının kendisine yerleştirilir. Örneğin:

    public abstract double Area  
    
  • Soyut bir özellik bildirirken (örneğin Area , bu örnekte), yalnızca hangi özellik erişimcilerinin kullanılabilir olduğunu belirtirsiniz, ancak bunları uygulamayın. Bu örnekte yalnızca bir get erişimcisi kullanılabilir, bu nedenle özellik salt okunurdur.

Aşağıdaki kod, Shape'nin üç alt sınıfını ve bu sınıfların kendi uygulamalarını sağlamak için Area özelliğini nasıl geçersiz kıldıklarını gösterir.

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

Aşağıdaki kod, bir dizi Shapetüretilmiş nesne oluşturan ve alanlarını yazdıran bir test programını gösterir.

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

Ayrıca bkz.