1. مقدمه
ما در مورد چندشکلی و وراثت چیزهای زیادی یاد گرفته ایم. در این مقاله از سری "غواصی به OOP"، داغ ترین و هیجان انگیزترین موضوع OOP در C#، کلاس های انتزاعی را مورد بحث قرار خواهیم داد. مفهوم کلاس های Abstract برای هر زبان دیگری یکسان است، اما در سی شارپ با آن به شکلی متفاوت برخورد می کنیم. کلاس های انتزاعی نقش متفاوت و بسیار جالبی در چندشکلی و وراثت دارند. ما تمام جنبههای کلاسهای انتزاعی را با آزمایشگاه و تئوری عملی خود به عنوان توضیحی درباره خروجیهای دریافتی خود پوشش خواهیم داد. همچنین نکاتی را که باید به خاطر بسپارید در پایان مقاله ذکر خواهیم کرد.
پیش نیازها
تعجب می کنم، ما با قسمت چهارم هدف یادگیری خود سروکار داریم. اکنون تنها انتظار من از خوانندگانم لذت بردن از سریال است.
2. نقشه راه
تعریف زیر از MSDN است :
"کلمه کلیدی انتزاعی به شما امکان می دهد کلاس ها و اعضای کلاسی را ایجاد کنید که ناقص هستند و باید در یک کلاس مشتق شده پیاده سازی شوند. یک کلاس انتزاعی نمی تواند نمونه سازی شود. هدف یک کلاس انتزاعی ارائه یک کلاس مشترک است. تعریف یک کلاس پایه که چندین کلاس مشتق شده می توانند به اشتراک بگذارند. برای مثال، یک کتابخانه کلاس ممکن است یک کلاس انتزاعی را تعریف کند که به عنوان پارامتری برای بسیاری از توابع آن استفاده می شود و برنامه نویسانی را که از آن کتابخانه استفاده می کنند ملزم به ارائه پیاده سازی خود از کلاس توسط ایجاد یک کلاس مشتق شده.
کلاس های انتزاعی نیز ممکن است متدهای انتزاعی را تعریف کنند. این کار با افزودن کلمه کلیدی abstract قبل از نوع برگشتی متد انجام می شود."
4. کلاس های انتزاعی در عمل
، یک برنامه کنسول به نام "InheritanceAndPolymorphism" را در ویژوال استودیو خود اضافه کنید. یک کلاس به نام Program دریافت خواهید کرد، فقط یک کلاس دیگر به نام ClassA اضافه کنید. توجه داشته باشید که ClassA باید انتزاعی علامت گذاری شود و کد زیر را به ClassA اضافه کنید. و کلاس برنامه:
- using System;
- namespace InheritanceAndPolymorphism
- {
- public abstract class ClassA
- {
- }
- /// <summary>
- /// Program: used to execute the method.
- /// Contains Main method.
- /// </summary>
- public class Program
- {
- private static void Main(string[] args)
- {
- ClassA classA = new ClassA();
- Console.ReadKey();
- }
- }
- }
کد را کامپایل کنید.
خروجی
خطای زمان کامپایل:
نمیتوان نمونهای از کلاس انتزاعی یا رابط «InheritanceAndPolymorphism.ClassA» ایجاد کرد .
اکنون به درک مفهوم می پردازیم. هیچ قدرتی نمی تواند مانع از نوشتن کلمه کلیدی انتزاعی قبل از کلاس شود. به عنوان یک اصلاح کننده کلاس عمل می کند. ما نمی توانیم با استفاده از کلمه کلیدی جدید یک شی از کلاس انتزاعی ایجاد کنیم. به نظر می رسد که کلاس برای ما بی فایده است زیرا نمی توانیم مانند گذشته از آن برای اهداف عملی دیگر استفاده کنیم.
5. تعریف متد غیر انتزاعی در کلاس انتزاعی
بیایید مقداری کد به کلاس انتزاعی خود مانند شکل زیر اضافه کنیم:
- /// <summary>
- /// Abstract class ClassA
- /// </summary>
- public abstract class ClassA
- {
- public int a;
- public void XXX()
- {
- }
- }
- /// <summary>
- /// Program: used to execute the method.
- /// Contains Main method.
- /// </summary>
- public class Program
- {
- private static void Main(string[] args)
- {
- ClassA classA = new ClassA();
- Console.ReadKey();
- }
- }
ما دوباره خطای قبلی را می بینیم. دوباره به ما یادآوری می کند که اگر قبلاً از یک اصلاح کننده انتزاعی استفاده کرده باشیم، نمی توانیم از new استفاده کنیم.