5a53

Event در سی شارپ: مفاهیم، کاربردها و مزایا

کدسل زبان های برنامه نویسی CSharp

لینک کوتاه https://codecell.ir/course/5a53
مدرس: سهراب قیصری
تعداد ویدیوها: 1
مدت زمان دوره: 00:18:00
وضعیت دوره: به اتمام رسیده
آخرین بروزرسانی: 1404/02/24
به اشتراک گذاری
نظرات
0
دیگر آموزش های مدرس:
آموزش استفاده از Event ها در سی شارپ

زبان برنامه‌نویسی سی‌شارپ (C#) یکی از محبوب‌ترین زبان‌های شی‌گرا در توسعه نرم‌افزارهای دسکتاپ، وب و موبایل است. این زبان که توسط مایکروسافت توسعه یافته، به دلیل ترکیب ساده‌نویسی، قدرت بالا و پشتیبانی قوی از مفاهیم برنامه‌نویسی شی‌گرا مانند کلاس، ارث‌بری، اینرتفیس و البته رویدادها (Events)، به انتخابی هوشمندانه برای بسیاری از برنامه‌نویسان تبدیل شده است.

Event یا رویداد در زبان #C مکانیزمی قدرتمند برای پیاده‌سازی الگوی طراحی ناظر (Observer) هستند و ارتباط بین اشیاء را به شکلی کم‌وابسته (loosely coupled) ممکن می‌سازند. رویدادها بر پایه‌ی Delegates ساخته شده‌اند و راهی را فراهم می‌کنند تا یک کلاس (انتشاردهنده) بتواند هنگام وقوع یک اتفاق خاص، دیگر کلاس‌ها (subscribers) را باخبر کند.

Event (رویداد) در سی شارپ چیست؟

در #C، Event روشی برای اطلاع‌رسانی یک شیء هنگام وقوع یک رویداد مهم هستند. آن‌ها اجازه می‌دهند تا یک شیء اعلان‌هایی منتشر کند و دیگر اشیاء بتوانند آن را subscribe کنند. رویدادها بر پایه‌ی Delegateها ساخته می‌شوند که به عنوان اشاره‌گرهایی به متدهایی عمل می‌کنند که باید هنگام وقوع رویداد اجرا شوند.

تفاوت Event با Delegate در سی شارپ

delegate در واقع یک اشاره‌گر به متد (method pointer) است و امکان فراخوانی متدهایی را فراهم می‌کند که امضایی مشابه دارند.

event نوعی wrapper برای delegate است که فقط ناشر می‌تواند آن را صدا بزند، اما دیگران فقط می‌توانند به آن گوش بدهند یا از آن لغو اشتراک کنند.

این تفاوت باعث افزایش امنیت و جلوگیری از دست‌کاری ناخواسته در رویدادها می‌شود.

مزایای استفاده از Event ها در سی شارپ

1. پیاده‌سازی الگوی ناظر (Observer)

رویدادها مهم‌ترین ابزار برای پیاده‌سازی الگوی ناظر هستند. در این الگو، یک شیء (Subject) لیستی از ناظرها (Observers) را نگهداری می‌کند و هرگاه وضعیتش تغییر کند، ناظرها را مطلع می‌سازد. این الگو در طراحی سیستم‌های پویا و واکنش‌گرا (Reactive) کاربرد فراوان دارد.

2. کاهش وابستگی بین اجزا (Loose Coupling)

رویدادها باعث می‌شوند اشیاء بدون شناخت مستقیم از یکدیگر تعامل داشته باشند. این ویژگی در پروژه‌های بزرگ که ماژول‌های مختلفی با هم در تعامل هستند، اهمیت حیاتی دارد.

3. افزایش توسعه‌پذیری

اضافه کردن یا حذف کردن مشترکین رویداد بدون نیاز به تغییر در منطق اصلی برنامه، باعث افزایش قابلیت نگهداری و توسعه‌پذیری نرم‌افزار می‌شود.

4. افزایش خوانایی و جداسازی مسئولیت‌ها

با تفکیک منطق ارسال رویداد از منطق پاسخ به آن، مسئولیت‌ها به درستی تقسیم می‌شوند و در نتیجه خوانایی و ساختار کد بهبود می‌یابد.

کاربردهای واقعی Event ها در سی شارپ

رویدادها در بسیاری از زمینه‌های توسعه نرم‌افزار کاربرد دارند. در ادامه چند مورد متداول ذکر شده است:

- رابط کاربری (UI)

در برنامه‌های ویندوز فرم یا WPF، هر تعامل کاربر (مثل کلیک روی دکمه) یک رویداد محسوب می‌شود. برنامه‌نویس می‌تواند متدهایی را به این رویدادها متصل کند تا به آن واکنش نشان دهد.

- برنامه‌نویسی چندلایه

در معماری‌های لایه‌ای، مانند لایه سرویس و لایه نمایش، می‌توان با استفاده از رویدادها ارتباط بین لایه‌ها را بدون وابستگی مستقیم برقرار کرد.

- اعلان‌های سیستم

در پروژه‌های بزرگ مانند سیستم‌های مانیتورینگ، یک بخش از سیستم می‌تواند در زمان وقوع خطا یا هشدار، رویداد ارسال کند و بخش‌های دیگر به آن واکنش نشان دهند.

- پلاگین‌ها و افزونه‌ها

در سیستم‌های قابل توسعه با پلاگین، از رویدادها می‌توان برای اطلاع‌رسانی به افزونه‌ها هنگام وقوع رخدادهای خاص استفاده کرد.

نکات مهم در طراحی Event ها در سی شارپ

برای استفاده اصولی از رویدادها در سی‌شارپ، رعایت چند نکته ضروری است:

1. استفاده از EventHandler

استفاده از نوع استاندارد EventHandler یا EventHandler<T> توصیه می‌شود، چون هماهنگی بیشتری با ابزارها و کتابخانه‌های سی‌شارپ دارد.

2. پیروی از الگوهای نام‌گذاری

نام رویدادها معمولاً با یک فعل شروع می‌شود مانند ValueChanged، ButtonClicked یا DataReceived. این سبک باعث خوانایی بهتر کد می‌شود.

3. ارسال داده به مشترکین (Subscriber)

برای ارسال اطلاعات به مشترکین، از کلاس‌های مشتق‌شده از EventArgs استفاده کنید تا اطلاعات لازم به همراه رویداد ارسال شود.

4. لغو اشتراک (Unsubscribe)

فراموش کردن لغو اشتراک از رویدادها (خصوصاً در برنامه‌های طولانی‌مدت یا سرویس‌ها) ممکن است منجر به نشت حافظه (Memory Leak) شود. همیشه هنگام پایان کار با شیء، مشترکین رویدادها را پاک کنید.

5. مدیریت رویداد در برنامه‌های چندریسمانی

در محیط‌های multi-thread، باید اطمینان حاصل شود که عملیات فراخوانی رویداد در thread مناسب انجام می‌شود. استفاده از Invoke یا SynchronizationContext در UI ضروری است.

چالش‌ها و معایب احتمالی

هرچند رویدادها ابزاری مفید هستند، اما اگر به درستی استفاده نشوند، می‌توانند مشکلاتی ایجاد کنند:

  • Memory Leak در صورت عدم حذف مشترکین
  • مشکل در اشکال‌زدایی (Debugging)، چون مشخص نیست دقیقاً چه چیزی به یک رویداد متصل شده است
  • عملکرد پایین‌تر در سیستم‌هایی که تعداد بسیار زیادی رویداد دارند

در نتیجه استفاده از آن‌ها نیازمند دقت در طراحی است.

نتیجه‌گیری

Event ها در سی‌شارپ یکی از پایه‌های مهم در طراحی نرم‌افزارهای مدرن هستند. با کمک آن‌ها می‌توان برنامه‌هایی با معماری منعطف، مقیاس‌پذیر و خوانا طراحی کرد. در این مقاله با مفهوم رویداد، نحوه عملکرد، مزایا، کاربردهای واقعی، نکات طراحی و حتی چالش‌های آن آشنا شدیم.

برای بهره‌گیری کامل از این ویژگی، توصیه می‌شود با مفاهیم مرتبط مانند delegate، الگوی ناظر، و مدیریت حافظه نیز به خوبی آشنا شوید.

فهرست ویدیوها
مدت زمان دوره: 00:18:00
01

Event ها در سی شارپ

00:18:00

پرسش های متداول

delegate اشاره‌گری به متد است، در حالی که event یک واسط امن برای استفاده از delegate‌ها است که فقط توسط ناشر قابل فراخوانی است.


آیا استفاده زیاد از رویدادها باعث کاهش عملکرد می‌شود؟

با لغو اشتراک  (Unsubscribe) از Event ها هنگام Dispose شدن شیء و استفاده از رویدادهای ضعیف (Weak Events) در موارد خاص.

مقالات آموزش برنامه نویسی مدرس

Response Caching در ASP.NET Core

Response Caching یک مکانیزم ذخیره سازی پاسخ سرور توسط مرورگر یا سایر کلاینت ها است. با استفاده از Response Caching در Asp.net Core می توانیم عملکرد و کارایی سیستم را بالا ببریم.

894 0 1402/10/22

Output Caching در ASP.NET Core 8.0

Output Caching یک ویژگی جدید است که از زمان .NET 7 معرفی شده است. این ویژگی به ما این امکان را می دهد که به راحتی یک کش پاسخ برای Web API خود بدون پیاده سازی IMemoryCache راه اندازی کنیم.

917 0 1402/10/14

الگوی طراحی زنجیره مسئولیت در سی شارپ

الگوی زنجیره مسئولیت یا Chain of Responsibility Design Pattern یک الگوی طراحی رفتاری(behavioral design pattern) است که اجازه می‌دهد یک درخواست در امتداد زنجیره‌ای از کنترل‌کننده‌های بالقوه ارسال شود تا زمانی که درخواست مناسب برای پردازش آن را پیدا کند.

884 2 1402/10/01

ViewComponent در ASP.NET Core

در ASP.NET Core با استفاده از ViewComponent ها می توان اجزای ماژولار، قابل استفاده مجدد، قابل نگهداری و مقیاس پذیر برای ساخت برنامه های کاربردی وب ایجاد کرد. در این مقاله به نحوه ایجاد و فراخوانی ViewComponent در Asp.net core پرداخته ایم.

1٬802 2 1402/05/15

تطبیق الگو در NET 7: ساده سازی تجزیه و تحلیل داده ها

تطبیق الگو یا Pattern Matching در net7 یک تکنیک قدرتمند برای تجزیه و تحلیل و دستکاری داده ها بر اساس ساختار آن ها است. تطبیق الگو یا Pattern Matching به توسعه دهندگان اجازه می دهد تا مقادیر را با یک الگوی خاص مطابقت دهند و اقدامات مربوطه را انجام دهند.

1٬583 2 1402/04/05

تزریق وابستگی در ASP.NET Core

تزریق وابستگی (DI) یک الگوی طراحی نرم افزاری است که امکان ایجاد برنامه های کاربردی و ماژولار را فراهم می کند.. در .NET Core تزریق وابستگی یا Dependency injection یک ویژگی مهم است که می تواند برای ساده سازی توسعه برنامه، بهبود تست پذیری و کاهش پیچیدگی کد مورد استفاده قرار گیرد.

2٬469 2 1402/02/04

ضروری ترین کتابخانه های NuGet برای ASP.NET Core

در این مقاله مهمترین،ضروری ترین و پرکاربردترین کتابخانه های NuGet که هر توسعه‌ دهنده‌ ASP.NET Core باید برای توسعه بهتر و کاهش زمان مورد نیاز برای برنامه ‌های خود از آن استفاده کنند را مورد بررسی قرار داده ایم.

1٬852 1 1401/12/29

الگوی طراحی Factory در سی شارپ

الگوهای طراحی یکی از مهمترین جنبه های طراحی و معماری نرم افزار است. Factory Method یک الگوی طراحی ایجادی است که یک رابط برای ایجاد اشیاء در یک سوپر کلاس فراهم می‌کند. ما در این مقاله الگوی Factory Method Design در سی شارپ را بررسی می کنیم.

1٬893 1 1401/10/28

مقایسه List و Array در سی شارپ

آرایه و لیست در سی شارپ هر دو به عنوان مجموعه ای از مقادیر عمل می کنند، اما در نحوه ذخیره محتوای خود در حافظه و نحوه دسترسی به آنها متفاوت هستند. در این مقاله Benchmark و کارایی List<T> با سایز داینامیک، List<T> با سایز ثابت و Array ها را بررسی می کنیم.

2٬512 2 1401/09/01

LinkedList در سی شارپ

LinkedList یا لیست پیوندی در سی شارپ یک ساختار داده خطی است که عنصر را در مکان غیر پیوسته ذخیره می کند. LinkedList شامل گره هایی است که هر گره حاوی یک فیلد داده و یک مرجع (پیوند) به گره بعدی در لیست است. در سی شارپ، LinkedList یا لیست پیوندی یک نوع مجموعه جنریک است.

2٬365 0 1401/08/13

Garbage Collection در دات نت

به طور کلی، Garbage Collection (GC) یا جمع آوری زباله در .Net چیزی نیست جز به دست آوردن مجدد حافظه اختصاص داده شده به اشیایی که در حال حاضر در هیچ بخشی از برنامه ما استفاده نمی شوند. ما در این مقاله Garbage Collection را در سی شارپ بررسی خواهیم کرد.

3٬100 5 1401/03/30

.NET Core چیست؟

.Net (با تلفظ «دات نت») یک چارچوب نرم افزاری کامپیوتری مدیریت شده رایگان و منبع باز برای سیستم عامل های ویندوز، لینوکس و macOS است. این پروژه در درجه اول توسط کارمندان مایکروسافت از طریق دات نت توسعه یافته و تحت مجوز MIT منتشر شده است.

2٬978 2 1401/03/16

پشته(Stack) در سی شارپ

پشته یا Stack در سی شارپ یک نوع خطی از ساختار داده است که قادر به ذخیره اشیاء است. پشته یک ساختار داده LIFO یا Last-In-First-Out است، به این معنی که آخرین موردی که در پشته قرار می گیرد اولین موردی است که از پشته خارج می شود.

2٬440 0 1401/03/09

صف (Queue) در سی شارپ

صف (Queue) در سی شارپ یک نوع خطی از ساختار داده است که قادر به ذخیره اشیاء است. Queue یک ساختار داده first-in-first-out یا FIFO است که به این معنی است که اولین مورد اضافه شده به صف اولین موردی است که حذف می شود.

2٬361 0 1401/02/30

تفاوت Hashtable و Dictionary در سی شارپ

در سی شارپ از Hashtable و Dictionary می توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. با این تفاوت که Hashtable و Dictionary عناصر را به عنوان جفت Key/Value ذخیره می کنند.در این مقاله به تفاوت های Hashtable و Dictionary پرداخته شده است.

2٬036 2 1401/02/23

Dictionary در سی شارپ

در سی شارپ از دیکشنری ها (Dictionary) می‌توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. تفاوت اصلی این است که یک Dictionary می تواند عناصر را به عنوان جفت Key/Value ذخیره کند.Key ها باید منحصر به فرد و نمی توانند null باشند. Value ها می توانند تکراری یا null باشند.

2٬546 3 1401/02/17

Hashtable در سی شارپ

از Hashtable می‌توان برای ذخیره مجموعه‌ای از داده‌ها، شبیه به List معمولی استفاده کرد. تفاوت اصلی این است که یک Hashtable می تواند عناصر را به عنوان جفت Key/Value به عنوان جایگزینی برای استفاده از Index ذخیره کند.

1٬910 5 1401/02/14

Redirect درخواست (ریدایرکت) در asp.net core

در برنامه های ASP.NET Core برای تغییر مسیر(ریدایرکت) و Redirect به یک URL خاص روش های مختلفی وجود دارد. در این مقاله با این تکنیک ها و کدهای مورد نیاز برای تغییر مسیر یک درخواست در ASP.NET Core آشنا می شویم.

3٬443 5 1401/02/12

تبدیل enum به لیست انتخابی در asp.net core

در این آموزش ما بوسیله Reflection ها در سی شارپ و asp.net core یک enum را به لیست انتخابی یا SelectListItem تبدیل خواهیم کرد و بوسیله تگ select در بوت استرپ 5 نمایش می دهیم.

1٬925 3 1401/02/03

نحوه ارسال ایمیل در asp و c#

امروزه ارسال ایمیل به امری ضروری در پروژه های وب تبدیل شده است.از ارسال ایمیل در asp می توان در بخش های تایید حساب کاربری،بازیابی رمز عبور،ایمیل مارکتینگ،ارسال خبرنامه و ... استفاده نمود.در این آموزش نحوه ارسال ایمیل در asp core و سی شارپ پیاده سازی گردیده است.

2٬893 6 1401/02/03
نظرات

برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید