آموزش کلاس های انتزاعی بیشتر (بخش ۲)
در فصل قبلی؛ نگاهی به کلاس های انتزاعی انداخته ایم. در این فصل، مثال ها و نیز متدهای انتزاعی را بیشتر بسط می دهیم. متدهای انتزاعی را می توان به طور کلی فقط در کلاس های انتزاعی استفاده کرد. تعریف آنها مشابه یک متد معمول می باشد اما کدی درون آنها وجود ندارد.
abstract class FourLeggedAnimal
{
public abstract string Describe();
}
بنابراین، چرا می خواهید یک متد خالی را تعریف کنید که هیچ کاری انجام ندهد؟ زیرا یک متد انتزاعی، تعهدی برای اجرای آن متد در کلیه زیر کلاس ها است. در واقع، در زمان کامپایل شدن کد نویسی، این متد بررسی می شود ، تا اطمینان حاصل شود که زیر کلاس های شما، این روش تعریف شده را دارا می باشد. دوباره این که، شیوه ای عالی برای ایجاد کلاس پایه برای چیزی است، در حالی که هنوز هم کنترل خاصی روی آنچه که زیر کلاس ها باید انجام دهند حفظ می شود. با توجه به این نکته، هر زمان که نیاز به استفاده از متدهای تعریف شده به عنوان متد انتزاعی در نوع پایه داشته باشید ، می توانید همیشه با یک زیر کلاس به عنوان پایه آن رفتار کنید. به عنوان نمونه، مثال زیر را در نظر بگیرید:
namespace AbstractClasses
{
class Program
{
static void Main(string[] args)
{
System.Collections.ArrayList animalList = new System.Collections.ArrayList();
animalList.Add(new Dog());
animalList.Add(new Cat());
foreach(FourLeggedAnimal animal in animalList)
Console.WriteLine(animal.Describe());
Console.ReadKey();
}
}
abstract class FourLeggedAnimal
{
public abstract string Describe();
}
class Dog : FourLeggedAnimal
{
public override string Describe()
{
return “I’m a dog!”;
}
}
class Cat : FourLeggedAnimal
{
public override string Describe()
{
return “I’m a cat!”;
}
}
}
همانطور که می بینید ، ما یک ArrayList ایجاد می کنیم تا حیوانات ما را در خود جای دهد. سپس یک Dog (سگ) جدید و یک Cat (گربه) جدید را نمونه سازی می کنیم و آنها را به لیست اضافه می کنیم. آنها به ترتیب به عنوان یک سگ و یک گربه نمونه سازی می شوند، اما آنها همچنین از نوع FourLeggedAnimal نیز هستند و از آنجا که کامپایلر می داند که زیر کلاس های آن کلاس، حاوی روش ()Describe است ، شما در واقع بدون دانستن دقیق نوع حیوان، مجاز به فراخوانی آن متد هستید. . بنابراین با ارجاع نقش ها به FourLeggedAnimal ، کاری که در حلقه foreach انجام می دهیم، می توانیم به اعضای زیر کلاس ها دسترسی پیدا می کنیم. این امر می تواند در بسیاری از حالات بسیار مفید باشد.