abstract (C# Başvurusu)

Değiştirici, abstract değiştirilen şeyin eksik veya tamamlanmamış bir uygulaması olduğunu gösterir. Soyut değiştirici sınıflar, yöntemler, özellikler, dizin oluşturucular ve olaylarla kullanılabilir. Bir sınıfın yalnızca diğer sınıfların abstract temel sınıfı olması amaçlandığını belirtmek için sınıf bildiriminde değiştiriciyi kullanın, kendi başına örneklenmez. Soyut olarak işaretlenmiş üyeler soyut sınıftan türetilen soyut olmayan sınıflar tarafından uygulanmalıdır.

Örnek 1

Bu örnekte sınıfıSquare, öğesinden Shapetüretildiği için uygulamasını GetArea sağlamalıdır:

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 sınıf örneği oluşturulamaz.

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

  • İki değiştiricinin karşıt anlamları olduğundan , soyut bir sınıfı korumalı değiştirici ile değiştirmek mümkün değildir. Değiştirici, sealed bir sınıfın devralınmasını engeller ve değiştirici bir sınıfın abstract devralınmasını 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çermelidir.

Yöntemin veya özelliğin abstract uygulama içermediğini belirtmek için bir yöntem veya özellik bildiriminde değiştiriciyi kullanın.

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

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

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

  • Soyut yöntem bildirimi gerçek bir uygulama sağlamadığından, yöntem gövdesi yoktur; yöntem bildirimi yalnızca noktalı virgülle biter ve imzadan sonra küme ayracı ({ }) yoktur. Örnek:

    public abstract void MyMethod();  
    

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

  • Soyut yöntem bildiriminde statik veya sanal değiştiricilerin kullanılması bir hatadır.

Soyut özellikler, bildirim ve çağırma söz dizimindeki farklılıklar dışında soyut yöntemler gibi davranır.

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

  • Soyut devralınan özellik, geçersiz kılma değiştiricisini kullanan bir özellik bildirimi dahil edilerek 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 sınıf, tüm arabirim üyeleri için uygulama sağlamalıdır.

Bir arabirim uygulayan soyut 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ı DerivedClass soyut BaseClasssınıfından türetilmiştir. soyut sınıfı bir soyut yöntem, AbstractMethodve iki soyut özellik X içerir ve Y.

// 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ğıdaki gibi bir deyim kullanarak soyut sınıfın örneğini oluşturmayı denerseniz:

BaseClass bc = new BaseClass();   // Error  

Derleyicinin 'BaseClass' soyut sınıfının bir örneğini oluşturamadığını belirten 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.