یک کلاس انتزاعی می تواند هم متد انتزاعی و هم عادی داشته باشد:
abstract class Animal
{
public abstract void animalSound();
public void sleep()
{
Console.WriteLine("Zzz");
}
}
از مثال بالا ، ایجاد یک شی از کلاس Animal امکان پذیر نیست:
Animal myObj = new Animal(); // Will generate an error (Cannot create an instance of the abstract class or interface 'Animal')
برای دسترسی به کلاس انتزاعی ، باید از کلاس دیگری به ارث برود. بیایید کلاس Animal را که در درس Polymorphism استفاده کردیم به یک کلاس انتزاعی تبدیل کنیم.
از درس وراثت بخاطر دارید که ما از نماد : برای به ارث بردن از یک کلاس استفاده می کنیم و از کلمه کلیدی override برای غلبه بر متد کلاس پایه استفاده می کنیم.
// Abstract class
abstract class Animal
{
// Abstract method (does not have a body)
public abstract void animalSound();
// Regular method
public void sleep()
{
Console.WriteLine("Zzz");
}
}
// Derived class (inherit from Animal)
class Pig : Animal
{
public override void animalSound()
{
// The body of animalSound() is provided here
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound(); // Call the abstract method
myPig.sleep(); // Call the regular method
}
}
چرا و چه موقع می توان از کلاسها و روشهای انتزاعی استفاده کرد؟
- برای دستیابی به امنیت - جزئیات خاصی را پنهان کنید و فقط جزئیات مهم یک شی را نشان دهید.
توجه: انتزاع را می توان با Interfaces نیز بدست آورد که در درس بعدی با آنها بیشتر آشنا خواهید شد.