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şaretlenen ü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 Shape
tü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, korumalı değiştirici ile bir soyut sınıfı değiştirmek mümkün değildir. Değiştirici,
sealed
bir sınıfın devralınmasını engeller veabstract
değiştirici bir sınıfın 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 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ğlamadığından, yöntem gövdesi yoktur; yöntem bildirimi yalnızca noktalı virgülle biter ve imzayı izleyen küme ayracı ({ }) yoktur. Örneğin:
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 farklar 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 bir 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. Örneğin:
interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}
Örnek 2
Bu örnekte, sınıfı DerivedClass
soyut bir sınıfından BaseClass
türetilmiştir. soyut sınıfı bir soyut yöntem AbstractMethod
, ve iki soyut özellik X
ve 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ğı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.