PDA

نسخه کامل مشاهده نسخه کامل : Delegate ها و Event ها در سی شارپ



hamidreza_buddy
24-04-2007, 12:34
در سی شارپ برای برنامه نویسی event driven باید با event ها و delegate ها آشنا بود.
یک نمونۀ این نوع برنامه نویسی ، سیستم even ها در Windows Form ها است. مثلاً یک دکمه را در نظر بگیرید که روی آن کلیک می شود. اگر قبلاً به Event به نام Click که متعلق به دکمه است ، تابعی انتساب داده باشیم، هر موقع که روی آن کلیک می شود، Event Click اجرا می شود و در نتیجه تابع مورد نظر ما اجرا می شود.
delegate
delegate شبیه اشاره گرهای توابع C و C++ هستند. یعنی می توان بوسیلۀ آن به یک تابع اشاره کرد.
بوسیلۀ delegate ها می توان متدهایی که در زمان اجرا (runtime) به آن ها انتساب داده شده اند را اجرا کرد.
یعنی برخلاف فراخوانی توابع معمولی که در زمان کامپایل (compile-time) مشخصند، هر تابع دلخواهی را می توان به آن ها انتساب داد و اجرا کرد.

فراخوانی یک تابع بدون delegate ها
در اکثر موارد قط نیاز است که توابع به صورت معمولی فراخوانی شوند. مثلاً اگر کلاس MyClass تابعی به نام Process داشته باشد، آن را به صورت زیر فراخوانی می کنیم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در اکثر موارد همچین چیزی کفایت می کند. ولی بعضی مواقع لازم است که روشی به کار بریم که بتوانیم این امکان را به استفاده کننده از کلاس بدهیم که خودش معیین کند که چه تبعی باید اجرا شود. این همان سیستم event driven است.

یک delegate ساده
شکل کلی تعریف یک delegate به صورت زیر است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مثلاً به تعریف نمونۀ زیر دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

یک delegate شکل کلی تابعی که قرار است فراخوانی شود را نشان می دهد.
برای استفاده از delegate سه مرحله وجود دارد:
1-تعریف
2-مقداردهی اولیه
3-اجرا

به برنامۀ زیر (SimpleDelegate1.cs) دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

که نتیجۀ اجرای آن به صورت زیر است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Event ها
Event های c# به صورت زیر تعریف می شوند.

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و برای اجرای آن:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Event های موجود در .NETFramework خصوصیات زیر را دارند:
* Event Handler های موجود در .NET دو پارامتر می گیرند و void برمی گردانند.
* پارامتر اول شئ را مشخص می کند که event را اجرا کرده.
* پارامتر دوم شئ است که از EventArgs مشتق شده است.
* Event ها باید عضو شئ تامین کندۀ Event باشند. (مثلاً عضو Button)
*

ابتدا به یک برنامۀ ساده دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که خروجی زیر را می دهد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در این برنامه دو تابع MyFunc1 و MyFunc2 موجودند که آن ها را به SimpleEvent انتساب می دهیم و سپس با اجرای SimpleEvent هر دو با هم اجرا می شوند.

حال به برنامۀ زیر که کمی پیچیده تر است دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

خروجی برنامه به صورت زیر خواهد بود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در فایل process.log نیز محتوای زیر قرار می گیرد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آموزش فارسی ( Persian )
برای اطلاعات بیشتر به اینجا مراجعه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]