فصل هیجدهم در نماینده ورویداد # C

<!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman";} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 72.0pt 72.0pt 72.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

C

#  در  نماینده ورویدادها

بعد از خواندن این فصل قادر به انجام کارهای زیر خواهید بود:

- اعلان یک نوع دادهی نماینده برای ایجاد یک انتزاع از یک نشانه متد

- ایجاد یک نمونه از نوع دادهی نماینده برای ارجاع به یک متد بینام

- فراخوانی یک متد از طریق یک نماینده

- اعلان یک فیلد رویداد

- ادارهکردن یک رویداد با استفاده از نماینده

- رها کردن یک رویداد

بیشتر کدهایی که تا به حال نوشتهاید به طور ترتیبی اجرا میشوند. در بعضی مواقع لازم است برنامه جریان جاری اجرا را

متوقف کرده و کار مهمتر دیگری را انجام دهد. زمانی که کار کامل شود، برنامه میتواند از جایی که ترک شده بود ادامه یابد.

مثال کلاسیک این نوع برنامهها، برنامههای ویندوزی است. یک فرم کنترلهایی همچون دکمه و کادر متنیها را نمایش

میدهد. زمانی که روی یک دکمه کلیک میکنید یا متنی در کادر متنی تایپ میکنید، انتظار دارید فرم فوراً به آن

عکسالعمل نشان دهد. برنامه باید کار جاری را موقتاً متوقف کند و ورودی شما را اداره کند. این نوع عملیات فقط به

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

به منظور ادارهی این نوع برنامه، در زمان اجرا دو چیز باید فراهم گردد: وسیلهای برای تشخیص مورد اضطراری که رخ داده

است و روشی برای تعیین متدی که در حین وقوع این رویداد باید اجرا شود. این عملیات هدف رویدادها و نمایندهها است.

-1-18 اعلان و کاربرد نمایندهها

یک نماینده 1، اشارهگری به یک متد است. یک نماینده در هنگام فراخوانی شبیه یک متد عادی بوده و شبیه یک متد رفتار

میکند. زمانی که یک نماینده را فراخوانی میکنید، برنامه متدی که نماینده به آن ارجاع میکند را اجرا میکند. می توانید به

طور پویا متدی که یک نماینده به آن ارجاع میکند را تغییر دهید. بنابراین کدی که یک نماینده را فراخوانی میکند، ممکن

است در هر بار اجرا متد مختلفی را اجرا کند. بهترین راه فهم نمایند هها، دیدن آنها در عمل است. یک مثال بررسی می کنیم.

1 Delegate

فصل هجدهم نماینده ها

317

-1-1-18 سناریوی کارخانه اتوماتیک

فرض کنید سیستمهای کنترل را برای یک کارخانهی اتوماتیک مینویسید. کارخانه تعداد زیادی ماشین مختلف دارد که

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

جوشکاری ورقهها به هم، رنگ کاری ورقهها و غیره. هر ماشین توسط فروشندهی خاصی ساخته و نصب شده است. ماشینها،

ها فراهم کردهاند تا بتوانید برای کنترل آنها به API همه کنترل شده به وسیله کامپیوتر هستند و هر فروشنده مجموعهای از

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

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

به معنی واسط برنامهنویسی کاربردی است. آن یک متد یا مجموعهای از متدها است که به شما اجازه API توجه: عبارت

درنظر بگیرید. API را به صورت مجموعه ای از توابع NET. میدهد یک نرم افزار را کنترل کنید. میتوانید چارچوب

هر ماشین پروسهی کنترلی منحصر به فرد خود را برای خاموشکردن امن دارد. اینها به صورت زیر خلاصه میشوند:

StopFolding(); // Folding and shaping machine

FinishWelding(); // Welding machine

PaintOff(); // Painting machine

-2-1-18 پیادهسازی کارخانه بدون کاربرد نمایندهها

یک روش ساده برای پیادهسازی عمل خاموش کردن سیستم در یک برنامهی کنترلی بصورت زیر نمایش داده میشود:

class Controller

{

...

public void ShutDown()

{

folder.StopFolding();

welder.FinishWelding();

painter.PaintOff();

}

...

// Fields representing the different machines

private FoldingMachine folder;

private WeldingMachine welder;

private PaintingMachine painter;

}

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

و کلاسهای ماشین خیلی قوی به هم پیوستهاند. Controller این کد را تغییر دهید. کلاس

-3-1-18 پیادهسازی کارخانه با استفاده یک نماینده

اگرچه اسامی هر متد متفاوت است، ولی همهی آنها صورت یکسانی دارند. آنها هیچ پارامتری نمیگیرند و هیچ مقداری بر

نمیگردانند. قالب کلی هر متد بصورت زیر است.

void methodName();

در اینجا یک نماینده مفید است. یک نماینده که با این صورت متد مطابقت داشته باشد، میتواند برای ارجاع به هر متد

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

delegate void stopMachineryDelegate();

به نکات زیر توجه کنید:

را بکار برید. delegate • زمان اعلان یک نماینده کلمهی کلیدی

mohsen_mahyar@yahoo.com - C# نویسی  برنامه

318

/ 0 نظر / 26 بازدید