دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
Class Library در سی شارپ
1404/01/10 -
دستور BREAK در پایگاه داده sql
1404/01/02 -
دستور CONTINUE در پایگاه داده SQL
1404/01/01 -
دستور WAITFOR در پایگاه داده SQL
1403/12/26 -
دستور GOTO در پایگاه داده SQL
1403/12/25 -
حلقه WHILE در پایگاه داده SQL
1403/12/24
رویدادها (Events) در سی شارپ

رویدادها (Events) در سی شارپ
رویدادها (Events) در سی شارپ مکانیزمی برای پیادهسازی الگوی انتشار/اشتراک (Publisher-Subscriber) هستند که امکان اجرای متدهای خاص در پاسخ به یک عمل را فراهم میکنند.
رویدادها معمولاً در کلاسها تعریف شده و از طریق delegate مدیریت میشوند.
وقتی یک رویداد اتفاق میافتد، تمامی متدهای مرتبط (Event Handlers) که به آن متصل شدهاند، اجرا میشوند.
رویدادها در برنامهنویسی GUI (مانند رویداد کلیک دکمه) و برنامههای مبتنی بر تعاملات کاربر بسیار رایج هستند.
برای تعریف یک رویداد، ابتدا یک delegate تعریف میشود و سپس رویداد بر اساس آن ساخته میشود.
مثال
public class Button {
public event Action Click; // تعریف رویداد
public void OnClick() {
Click?.Invoke(); // اجرای رویداد در صورت داشتن مشترک
}
}
class Program {
static void Main() {
Button btn = new Button();
btn.Click += () => Console.WriteLine("Button Clicked!");
btn.OnClick();
}
}
در این مثال، هنگام کلیک دکمه، متد مرتبط اجرا میشود.
ویژگیهای رویدادها در سی شارپ
-
مبتنی بر Delegate
رویدادها با استفاده از نمایندهها (Delegates) پیادهسازی میشوند. -
ناشر و مشترک (Publisher & Subscriber)
یک کلاس رویدادی را ایجاد کرده و کلاسهای دیگر میتوانند به آن گوش دهند. -
امنیت بالا
فقط کلاس ناشر میتواند یک رویداد را فراخوانی کند. -
انعطافپذیری بالا
مشترکین میتوانند هر زمان که لازم باشد، در رویدادها ثبتنام یا لغو اشتراک کنند.
کاربردهای رویداد در سی شارپ
-
تعریف Delegate برای رویداد
قبل از تعریف یک رویداد، باید یک Delegate تعریف کنیم. این Delegate تعیین میکند که متدهای مشترکین چگونه باید باشند. -
تعریف یک کلاس با رویداد
اکنون کلاس ناشر (Publisher) را تعریف کرده و یک رویداد درون آن ایجاد میکنیم.
public class Publisher
{
public event MyEventHandler OnMessageReceived;
public void SendMessage(string message)
{
Console.WriteLine("Sending message: " + message);
OnMessageReceived?.Invoke(message);
}
}
-
ایجاد کلاس مشترک (Subscriber) و ثبتنام در رویداد
اکنون کلاس مشترک را ایجاد میکنیم که در رویداد OnMessageReceived ثبتنام کرده و متدی را اجرا کند.
public class Subscriber
{
public void OnMessageReceivedHandler(string message)
{
Console.WriteLine("Subscriber received: " + message);
}
}
-
استفاده از رویدادها در برنامه اصلی
اکنون کلاس Publisher و Subscriber را درون Main پیادهسازی کرده و رویداد را مدیریت میکنیم.
خروجی برنامه:
Sending message: Hello, Events in C#!
Subscriber received: Hello, Events in C#!
استفاده از EventHandler و EventArgs در سی شارپ
در سی شارپ، میتوان از EventHandler و EventArgs برای مدیریت رویدادها استفاده کرد. این روش استانداردتر و قابل خواندنتر است.
-
تعریف رویداد با استفاده از EventHandler
public class DataProcessor
{
public event EventHandler<DataEventArgs> DataProcessed;
public void ProcessData(string data)
{
Console.WriteLine("Processing data: " + data);
OnDataProcessed(new DataEventArgs(data));
}
protected virtual void OnDataProcessed(DataEventArgs e)
{
DataProcessed?.Invoke(this, e);
}
}
-
تعریف کلاس EventArgs
public class DataEventArgs : EventArgs
{
public string Data { get; }
public DataEventArgs(string data)
{
Data = data;
}
}
-
ایجاد کلاس مشترک
public class DataSubscriber
{
public void OnDataProcessed(object sender, DataEventArgs e)
{
Console.WriteLine("Data received: " + e.Data);
}
}
-
پیادهسازی در برنامه اصلی
class Program
{
static void Main(string[] args)
{
DataProcessor processor = new DataProcessor();
DataSubscriber subscriber = new DataSubscriber();
processor.DataProcessed += subscriber.OnDataProcessed;
processor.ProcessData("Sample Data");
}
}
خروجی:
Processing data: Sample Data
Data received: Sample Data
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
مدیریت چندین مشترک در رویدادها
یکی از مزایای رویدادها این است که میتوان چندین مشترک را به یک رویداد اضافه یا حذف کرد.
publisher.OnMessageReceived += subscriber1.OnMessageReceivedHandler;
publisher.OnMessageReceived += subscriber2.OnMessageReceivedHandler;
برای حذف یک مشترک از رویداد:
publisher.OnMessageReceived -= subscriber1.OnMessageReceivedHandler;
مثال پروژه محور از رویدادها در سی شارپ
پروژه
سیستم اعلان (Notification System) با استفاده از رویدادها در سی شارپ
در این پروژه، یک سیستم اعلان را پیادهسازی میکنیم که در آن کاربران به یک مرکز اعلان (Notification Center) متصل شده و اعلانهای جدید را دریافت میکنند.
-
تعریف کلاس NotificationCenter (ناشر)
این کلاس اعلانها را ارسال میکند و رویدادی برای اطلاعرسانی به مشترکین دارد.
public class NotificationCenter
{
public event EventHandler<NotificationEventArgs> NotificationSent;
public void SendNotification(string message)
{
Console.WriteLine($"ارسال اعلان: {message}");
OnNotificationSent(new NotificationEventArgs(message));
}
protected virtual void OnNotificationSent(NotificationEventArgs e)
{
NotificationSent?.Invoke(this, e);
}
}
-
تعریف کلاس NotificationEventArgs برای انتقال داده
public class NotificationEventArgs : EventArgs
{
public string Message { get; }
public NotificationEventArgs(string message)
{
Message = message;
}
}
-
تعریف کلاس User (مشترک)
کاربران در این کلاس ثبتنام میکنند و هنگام دریافت اعلان، پیام را در کنسول نمایش میدهند.
public class User
{
public string Name { get; }
public User(string name)
{
Name = name;
}
public void OnNotificationReceived(object sender, NotificationEventArgs e)
{
Console.WriteLine($"{Name} دریافت کرد: {e.Message}");
}
}
-
پیادهسازی برنامه اصلی
در این بخش، کاربران به سیستم اعلان متصل شده و اعلان دریافت میکنند.
class Program
{
static void Main(string[] args)
{
NotificationCenter notificationCenter = new NotificationCenter();
User user1 = new User("علی");
User user2 = new User("زهرا");
// ثبت کاربران در رویداد اعلان
notificationCenter.NotificationSent += user1.OnNotificationReceived;
notificationCenter.NotificationSent += user2.OnNotificationReceived;
// ارسال اعلان
notificationCenter.SendNotification("نسخه جدید نرمافزار منتشر شد! ");
// حذف یکی از کاربران و ارسال اعلان دیگر
notificationCenter.NotificationSent -= user1.OnNotificationReceived;
notificationCenter.SendNotification("تخفیف ویژه فقط تا امشب! ");
Console.ReadLine();
}
}
خروجی مورد انتظار
ارسال اعلان: نسخه جدید نرمافزار منتشر شد!
علی دریافت کرد: نسخه جدید نرمافزار منتشر شد!
زهرا دریافت کرد: نسخه جدید نرمافزار منتشر شد!
ارسال اعلان: تخفیف ویژه فقط تا امشب!
زهرا دریافت کرد: تخفیف ویژه فقط تا امشب!
نتیجه
در این پروژه، الگوی ناشر-مشترک را برای مدیریت اعلانها با رویدادها در سی شارپ پیادهسازی کردیم.
کاربران میتوانند ثبتنام یا لغو اشتراک کنند.
سیستم اعلان رویداد را مدیریت کرده و کاربران را بهصورت پویا بهروزرسانی میکند.
دوره های مرتبط

آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.