ارثبری (Inheritance):
ارثبری یکی دیگر از ارکان اصلی برنامهنویسی شیءگرا است
که به ما اجازه میدهد یک کلاس جدید را بر اساس یک کلاس موجود ایجاد کنیم. این
مفهوم شبیه ارث بردن ویژگیها از والدین در دنیای واقعی است. مثلاً همانطور که
فرزندان برخی خصوصیات را از والدین خود به ارث میبرند، در برنامهنویسی هم یک
کلاس میتواند ویژگیها و رفتارهای کلاس دیگر را به ارث ببرد.
هدف ارثبری در سیشارپ:
چه زمانی از ارثبری استفاده کنیم؟
نحوه پیادهسازی ارثبری در سیشارپ:
در سیشارپ، از علامت دو
نقطه (:) برای نشان دادن ارثبری استفاده میکنیم. کلاسی که ارث میبرد را کلاس
فرزند یا مشتق شده، و کلاسی که از آن ارث برده میشود را کلاس والد یا پایه مینامیم.
مثال عملی: حیوانات
فرض کنید میخواهیم
سیستمی برای مدیریت حیوانات ایجاد کنیم:
public class Animal
{
public string Name { get; set; }
public int Age { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("حیوان صدا میکند");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("سگ پارس میکند");
}
public void Fetch()
{
Console.WriteLine("سگ توپ را میآورد");
}
}
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("گربه میو میو میکند");
}
public void Scratch()
{
Console.WriteLine("گربه چنگ میزند");
}
}
در این مثال، Dog و Cat از Animal ارث میبرند. آنها Name و Age را به ارث میبرند و متد MakeSound را بازنویسی میکنند. همچنین هر کدام متد خاص خود را دارند.
ارثبری به ما کمک میکند تا کد تمیزتر، قابل استفاده مجدد و ساختاریافتهتری بنویسیم. این مفهوم یکی از ابزارهای قدرتمند در طراحی و پیادهسازی سیستمهای نرمافزاری پیچیده است.
با عرض پوزش از اینکه در فایل قبلی که برای دانلود تقویم قرار داده بودم یک فایل کتابخانه ای از قلم افتاده بود و بخاطر همین کار نمی کرد . در این پست دو تقویم برای دانلود گذاشته ام.
تقویم روزانه :
با دانلود این تقویم بسیار کم حجم می توانید تاریخ شمسی قمری و میلادی هر روز را روی دسکتاپ خو د داشته باشید و هر کدام را که نخواستید می توانید با یک کلیک بردارید .
تقویم روزانه مخصوص دسکتاپ را می توانید از اینجا دانلود کنید.
تقویم سالانه :
یک تقویم دیگر را هم می توانید با کلیک روی تصویر پائین دانلود کنید.
در این پست برای علاقه مندان به سی شارپ کدی داریم که در آن با زدن یک کلید تاریخ و ساعت دقیق سیستم با یک شی از تاریخ و ساعت از قبل تعیین شده مقایسه شده و سه حالت ممکن برای آن پیش بینی شده که به ترتیب زیر می باشند .
اول اگر که اختلاف تاریخ جاری سیستم با تاریخ تعیین شده بیش از یک ساعت باشد رنگ لیبل روی فرم سبز می شود.
دوم : اگر اختلاف زمان بین تاریخ جاری سیستم با تاریخ تعیین شده کمتر از یک ساعت باشد رنگ لیبل زرد می شود .
سوم : و نهایتا در صورتی که تاریخ سیسم از تاریخ تعیین شده گذشته باشد و بهبارت دیگر تاریخ و ساعت سیستم از تاریخ و ساعت تعیین شده بزرگتر باشد رنگ لیبل قرمز می شود .
متن کد در زیر آمده :
namespace zaman
{
public partial class Form1 : Form
{
private DateTime specificDate;
public Form1()
{
InitializeComponent();
specificDate = new DateTime(2024, 11, 16, 15, 30, 0); // سال، ماه، روز، ساعت، دقیقه، ثانیه
}
private void button1_Click(object sender, EventArgs e)
{
// دریافت تاریخ و زمان جاری سیستم
DateTime currentDate = DateTime.Now;
// محاسبه فاصله زمانی بین تاریخ جاری و تاریخ تعیین شده
TimeSpan timeDifference = specificDate - currentDate;
// بررسی شرایط مختلف
if (timeDifference.TotalHours > 1) // اگر فاصله بیش از یک ساعت باشد
{
label1.Text = "شما هنوز فرصت دارید.";
label1.BackColor = Color.Green; // رنگ سبز
}
else if (timeDifference.TotalHours <= 1 && timeDifference.TotalSeconds > 0) // اگر فاصله کمتر از یک ساعت است و هنوز نرسیدهایم
{
label1.Text = "شما کمتر از یکساعت تا اتمام زمان فرصت دارید.";
label1.BackColor = Color.Yellow; // رنگ زرد
}
else // اگر از تاریخ گذشتهایم
{
label1.Text = "مهلت شما به اتمام رسیده.";
label1.BackColor = Color.Red; // رنگ قرمز
} } } }
معرفی کلاس رگولار (Regular Class)
مقدمه
در درسهای قبلی به معرفی انواع دادهها در زبان برنامهنویسی سیشارپ پرداختم. به جای تکرار توضیحات مفصل درباره انواع عددی که اکثر علاقهمندان به برنامهنویسی با آنها آشنا هستند، تصمیم گرفتم به بررسی کلاسها بپردازم. در این درس، نوع کلاس معمولی یا "رگولار" (Regular Class) رو معرفی میکنم که یکی از مهمترین و پرکاربردترین ساختارها در سیشارپ است.
نوع کلاس (Regular Class)
کلاسها در سیشارپ الگوهایی هستن که برای ایجاد اشیاء (Objects) استفاده میشن. یه کلاس معمولی میتونه دادهها (فیلدها) و رفتارها (متدها) مربوط به یه موجودیت خاص رو تعریف کنه. این ساختار به برنامهنویس اجازه میده تا ویژگیها و عملکردهای یه شیء رو بهصورت سازمانیافته کنار هم قرار بده.
ویژگیهای کلاس
کلاسها میتونن شامل موارد زیر باشن:
فیلدها (Fields): متغیرهایی که وضعیت یا اطلاعات شیء رو نگه میدارن (مثل رنگ یا مدل یه خودرو).
متدها (Methods): عملکردهایی که رفتار شیء رو مشخص میکنن (مثل حرکت کردن یا توقف یه خودرو).
برای مثال، اگه بخواهیم یه کلاس برای یه خودرو تعریف کنیم، میتونیم فیلدهایی مثل Color (رنگ)، Model (مدل) و Year (سال تولید) داشته باشیم و متدهایی مثل Drive() (حرکت)، Stop() (توقف) و ChangeGear() (تغییر دنده) رو پیادهسازی کنیم.
یادآوری مهم
کلاسها در سیشارپ شباهتهایی با انواع داده ساده (مثل اعداد) دارن، چون هر دو برای ذخیره اطلاعات استفاده میشن. اما تفاوت کلیدی اینه که کلاسها امکانات بیشتری مثل تعریف رفتار، سازماندهی دادههای پیچیده و استفاده از مفاهیم شیءگرایی (مثل کپسولهسازی و وراثت) رو فراهم میکنن.
سازماندهی و اجرا
کلاسها به ما کمک میکنن تا دادهها و رفتارهای مرتبط با یه شیء رو توی یه ساختار منظم و قابلفهم سازماندهی کنیم. در حالی که یه نوع داده عددی (مثل int) فقط یه مقدار ساده رو نگه میداره، یه کلاس میتونه چندین نوع داده مختلف رو کنار هم داشته باشه و عملیات پیچیدهتری رو اجرا کنه. مثلاً، یه کلاس Car میتونه شامل فیلدهای Color (رشته)، Model (رشته) و Year (عدد صحیح) باشه و متدهایی مثل Drive() و Stop() رو برای مدیریت رفتار خودرو پیادهسازی کنه.
نگهداری انواع مختلف داده
یکی از مزیتهای بزرگ کلاسها اینه که میتونن انواع مختلف داده رو توی خودشون نگه دارن. این ویژگی باعث میشه اطلاعات مرتبط با یه شیء بهصورت منسجم ذخیره بشن و کد خواناتر و قابلنگهداریتر بشه. مثلاً، یه کلاس میتونه یه عدد صحیح برای سال تولید (Year)، یه رشته برای مدل (Model) و یه رشته دیگه برای رنگ (Color) داشته باشه.
مثال ساده از یک کلاس رگولار
در زیر یه نمونه ساده از کلاس Car رو میبینید که شامل یه فیلد، یه سازنده و یه متد است:
public class Car
{
private Label outputLabel; // فیلدی برای نگهداری مرجع به یک لیبل که پیامها را نمایش میدهد
public Car(Label label) // سازنده کلاس که یک لیبل را بهعنوان پارامتر میگیرد
{
outputLabel = label; // مقدار پارامتر ورودی را به فیلد اختصاص میدهیم
}
public void Start() // متدی برای شبیهسازی استارت خودرو و نمایش پیام
{
outputLabel.Text = "Car started."; // متن "Car started." را در لیبل نمایش میدهیم
}
}
توضیح مثال:
فیلد outputLabel: یه متغیر خصوصی از نوع Label (که معمولاً توی برنامههای Windows Forms استفاده میشه) برای نمایش پیامها.
سازنده Car: هنگام ساخت شیء، یه لیبل رو میگیره و به فیلد outputLabel اختصاص میده.
متد Start: وقتی فراخوانی بشه، متن "Car started." رو توی لیبل نشون میده.
نحوه استفاده:
Label myLabel = new Label(); // فرض کنید این لیبل توی فرم تعریف شده
Car myCar = new Car(myLabel); // ساخت یه نمونه از کلاس Car
myCar.Start(); // اجرای متد Start و نمایش پیام در لیبل