abstract (C# Başvurusu)

Değiştirici, abstract değiştirilen şeyin eksik veya eksik bir uygulamaya sahip olduğunu gösterir. Soyut değiştirici sınıflar, yöntemler, özellikler, dizinleştiriciler ve olaylarla birlikte kullanılabilir. Sınıf bildiriminde değiştiricisini kullanarak bir sınıfın yalnızca diğer sınıfların temel sınıfı olması hedeflenmiş olduğunu, kendi başına abstract örneklenen olmadığını belirteceksiniz. Soyut olarak işaretlenen üyeler soyut sınıftan türetilmeyen sınıflar tarafından uygulanmalıdır.

Örnek 1

Bu örnekte, sınıfından Square türeyen GetArea bir uygulaması sağlansa Shape gerekir:

abstract class Shape
{
    public abstract int GetArea();
}

class Square : Shape
{
    private int _side;

    public Square(int n) => _side = n;

    // GetArea method is required to avoid a compile-time error.
    public override int GetArea() => _side * _side;

    static void Main()
    {
        var sq = new Square(12);
        Console.WriteLine($"Area of the square = {sq.GetArea()}");
    }
}
// Output: Area of the square = 144

Soyut sınıflar aşağıdaki özelliklere sahiptir:

  • Soyut bir sınıf örneği olamaz.

  • Soyut bir sınıf soyut yöntemler ve erişimciler içerebilir.

  • İki değiştiricinin farklı anlamları olduğundan, soyut bir sınıfı korumalı değiştiriciyle değiştirmek mümkün değildir. Değiştirici, sealed bir sınıfın devralınmasını önler ve abstract değiştirici bir sınıfın devralınması gerektirir.

  • Soyut sınıftan türetilen soyut olmayan bir sınıf, devralınan tüm soyut yöntemlerin ve erişimcilerin gerçek uygulamalarını içermeli.

Yöntemin abstract veya özelliğin uygulama içere olmadığını belirtmek için bir yöntem veya özellik bildiriminde değiştiricisini kullanın.

Soyut yöntemler aşağıdaki özelliklere sahiptir:

  • Soyut yöntem, örtülü olarak bir sanal yöntemdir.

  • Soyut yöntem bildirimlerine yalnızca soyut sınıflarda izin verilir.

  • Soyut yöntem bildirimi gerçek bir uygulama sağladığı için yöntem gövdesi yoktur; yöntem bildirimi yalnızca noktalı virgülle biter ve imzayı takip eden küme ayraçları ({ }) yoktur. Örnek:

    public abstract void MyMethod();  
    

    Uygulama, soyut olmayan bir sınıfın üyesiolan bir yöntem geçersiz kılma tarafından sağlanır.

  • Soyut yöntem bildiriminde statik veya sanal değiştiricileri kullanmak bir hatadır.

Soyut özellikler, bildirim ve çağırma söz dizimleri arasındaki farklar dışında soyut yöntemler gibi davranır.

  • Değiştiriciyi statik bir abstract özellikte kullanmak hatadır.

  • Soyut devralınan bir özellik, geçersiz kılma değiştiricisi kullanan bir özellik bildirimi dahil tarafından türetilmiş bir sınıfta geçersiz kılınabilir.

Soyut sınıflar hakkında daha fazla bilgi için bkz. Soyut ve Korumalı Sınıflar ve Sınıf Üyeleri.

Soyut bir sınıf tüm arabirim üyeleri için uygulama sağlamalıdır.

Bir arabirim uygulayan soyut bir sınıf, arabirim yöntemlerini soyut yöntemlerle eşler. Örnek:

interface I
{
    void M();
}

abstract class C : I
{
    public abstract void M();
}

Örnek 2

Bu örnekte, sınıfı soyut DerivedClass bir sınıftan türetildi. BaseClass Soyut sınıfı soyut bir yöntem( AbstractMethod ) ve iki soyut özellik (ve ) X Y içerir.

// Abstract class
abstract class BaseClass
{
    protected int _x = 100;
    protected int _y = 150;

    // Abstract method
    public abstract void AbstractMethod();

    // Abstract properties
    public abstract int X { get; }
    public abstract int Y { get; }
}

class DerivedClass : BaseClass
{
    public override void AbstractMethod()
    {
        _x++;
        _y++;
    }

    public override int X   // overriding property
    {
        get
        {
            return _x + 10;
        }
    }

    public override int Y   // overriding property
    {
        get
        {
            return _y + 10;
        }
    }

    static void Main()
    {
        var o = new DerivedClass();
        o.AbstractMethod();
        Console.WriteLine($"x = {o.X}, y = {o.Y}");
    }
}
// Output: x = 111, y = 161

Yukarıdaki örnekte, aşağıdakine benzer bir deyimi kullanarak soyut sınıfın örneğini yapmaya çalışırken:

BaseClass bc = new BaseClass();   // Error  

Derleyicinin 'BaseClass' soyut sınıfının bir örneğini oluşturamay derleye bir hata alırsınız.

C# Dil Belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.