دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
کلمهی کلیدی sealed و object type در سی شارپ
1403/11/02 -
عملگر UNION در پایگاه داده SQL
1403/10/30 -
کلاسهای انتزاعی در سی شارپ
1403/10/30 -
توابع تبدیل کننده در پایگاه داده SQL
1403/10/29 -
متدهای override در سی شارپ
1403/10/28 -
توابع پنجره ای در پایگاه داده SQL
1403/10/28
متدهای override در سی شارپ
متدهای override در سی شارپ
متدهای Override در سیشارپ به شما این امکان را میدهند که متدی را که در یک کلاس پایه (Parent Class) تعریف شده است، در یک کلاس مشتقشده (Child Class) بازنویسی کنید.
این قابلیت بخشی از ویژگی پلیمورفیسم در شیءگرایی است و به شما امکان میدهد رفتارهای متفاوتی را برای یک متد بسته به نوع کلاس پیادهسازی کنید.
برای استفاده از این قابلیت، متدی که در کلاس پایه تعریف میشود، باید با کلیدواژه virtual مشخص شود.
سپس، در کلاس مشتقشده میتوانید آن متد را با استفاده از کلیدواژه override بازنویسی کنید.
استفاده از متدهای Override باعث افزایش انعطافپذیری و قابلیت استفاده مجدد از کد میشود.
این متدها امکان پیادهسازی رفتارهای خاص برای هر کلاس را فراهم میکنند، در حالی که از یک مرجع (Reference) مشترک استفاده میشود.
در نتیجه، میتوان از یک اینترفیس یکسان برای مدیریت کلاسهای مختلف بهره برد.
این ویژگی به طور گسترده در سناریوهایی مانند طراحی سیستمهای مقیاسپذیر و خوانا مورد استفاده قرار میگیرد.
هدف اصلی از استفاده از متدهای Override در سیشارپ، تغییر رفتار متدهای کلاس پایه در کلاس مشتقشده است.
این قابلیت به شما امکان میدهد که عملکرد پیشفرض متدها را برای نیازهای خاص برنامه خود سفارشی کنید.
ساختار متدهای Override در سیشارپ
برای تعریف متدهای Override در سیشارپ، باید به ترتیب زیر عمل کنید:
متدی که در کلاس پایه تعریف میشود، باید با کلیدواژه virtual مشخص شود.
متدی که در کلاس مشتقشده تعریف میشود، باید با کلیدواژه override مشخص شود.
مثال ساده
using System;
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Dog barks");
}
}
class Program
{
static void Main()
{
Animal myAnimal = new Dog();
myAnimal.MakeSound(); // خروجی: Dog barks
}
}
در مثال بالا، متد MakeSound در کلاس پایه با کلیدواژه virtual تعریف شده و در کلاس Dog با استفاده از کلیدواژه override بازنویسی شده است.
🌟 آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
قوانین استفاده از Override در سی شارپ
هنگام استفاده از متدهای Override در سیشارپ، باید به قوانین زیر توجه کنید:
-
وجود متد virtual یا abstract در کلاس پایه
متدی که میخواهید بازنویسی کنید، باید با یکی از کلیدواژههای virtual یا abstract تعریف شده باشد. -
همسانی امضا (Signature)
امضای متد بازنویسیشده باید دقیقاً با امضای متد پایه یکسان باشد. -
استفاده از override
متد بازنویسیشده باید با کلیدواژه override تعریف شود. -
نوع بازگشتی یکسان
نوع بازگشتی متد در کلاس مشتقشده باید با نوع بازگشتی متد در کلاس پایه یکسان باشد.
تفاوت Override و New
یکی از نکات مهمی که باید به آن توجه کنید، تفاوت بین کلیدواژههای override و new است.
در حالی که override رفتار متدهای پایه را تغییر میدهد، کلیدواژه new متدی کاملاً جدید در کلاس مشتقشده تعریف میکند و ارتباط آن با متد پایه را قطع میکند.
مثال تفاوت
using System;
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal makes a sound");
}
}
class Dog : Animal
{
public new void MakeSound()
{
Console.WriteLine("Dog barks");
}
}
class Program
{
static void Main()
{
Animal myAnimal = new Dog();
myAnimal.MakeSound(); // خروجی: Animal makes a sound
Dog myDog = new Dog();
myDog.MakeSound(); // خروجی: Dog barks
}
}
در این مثال، استفاده از new باعث میشود که متد MakeSound در کلاس Dog جایگزین متد کلاس پایه نشود.
Override و متدهای Abstract
اگر متدی در کلاس پایه با کلیدواژه abstract تعریف شود، حتماً باید در کلاس مشتقشده بازنویسی شود.
در این موارد، از کلیدواژه override استفاده میشود.
مثال متد Abstract
using System;
abstract class Shape
{
public abstract void Draw();
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a Circle");
}
}
class Program
{
static void Main()
{
Shape shape = new Circle();
shape.Draw(); // خروجی: Drawing a Circle
}
}
مزایای استفاده از متدهای Override
-
انعطافپذیری بالا
امکان تغییر رفتار متدها در کلاسهای مشتقشده. -
پشتیبانی از پلیمورفیسم
قابلیت استفاده از یک مرجع برای کلاسهای مختلف. -
کاهش کد تکراری
تعریف منطق مشترک در کلاس پایه و تغییر آن در صورت نیاز در کلاسهای فرزند.
مشکلات رایج در Override
-
عدم تعریف virtual یا abstract
اگر متدی در کلاس پایه با کلیدواژه virtual یا abstract تعریف نشده باشد، امکان بازنویسی آن وجود ندارد. -
عدم تطابق امضا
اگر امضای متد بازنویسیشده با متد اصلی تطابق نداشته باشد، خطای کامپایل ایجاد میشود. -
استفاده اشتباه از new
استفاده از new به جای override میتواند باعث رفتار غیرمنتظره شود.
راهحل مشکلات
همیشه از کلیدواژههای virtual و override به درستی استفاده کنید.
قبل از بازنویسی، مطمئن شوید که امضای متدها یکسان است.
مثال پروژه محور از Override در سیشارپ
فرض کنید در حال توسعه یک سیستم گزارشگیری برای شرکت هستید که انواع مختلف گزارشها (متنی و تصویری) را مدیریت میکند.
شما میخواهید یک متد تولید گزارش (GenerateReport) را برای هر نوع گزارش سفارشی کنید.
using System;
abstract class Report
{
// متد اصلی تولید گزارش
public abstract void GenerateReport();
}
class TextReport : Report
{
// بازنویسی متد برای تولید گزارش متنی
public override void GenerateReport()
{
Console.WriteLine("Generating a Text Report...");
}
}
class GraphicalReport : Report
{
// بازنویسی متد برای تولید گزارش تصویری
public override void GenerateReport()
{
Console.WriteLine("Generating a Graphical Report...");
}
}
class Program
{
static void Main()
{
// ایجاد لیستی از گزارشها
Report[] reports = new Report[]
{
new TextReport(),
new GraphicalReport()
};
// تولید گزارش برای هر آیتم در لیست
foreach (var report in reports)
{
report.GenerateReport();
}
}
}
خروجی برنامه:
Generating a Text Report...
Generating a Graphical Report...
توضیح پروژه:
کلاس Report به عنوان کلاس پایه تعریف شده است که شامل یک متد GenerateReport است که به صورت abstract تعریف شده.
کلاسهای TextReport و GraphicalReport این متد را بازنویسی میکنند و رفتار خاص خود را ارائه میدهند.
در متد Main، از یک آرایه برای ذخیره انواع مختلف گزارشها استفاده شده است. سپس با پیمایش آرایه، متد GenerateReport برای هر نوع گزارش فراخوانی میشود.
این معماری از اصول شیءگرایی استفاده کرده و قابلیت گسترش سیستم را آسان میکند.
دوره های مرتبط
آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.