-
شنبه 13 مهر 1387, 14:16 عصر
#41
کاربر دائمی
آموزش سی شارپ - قسمت سي و چهارم
Delegates in CSharp
بعد از بررسی اينترفيس ها بايد به بررسي دليگيت ها بپردازيم. براي اين بررسي ابتدا من يک تعريف از Delegate خواهم گفت. سپس به روش ايجاد (Syntax) دليگيت ها مي بپردازم و در نهايت به دلايل استفاده یا مثال هاي آن خواهم پرداخت. لطفا سعي کنيد که در بررسي delegate ها کمي حوصله کنيد و با دقت مطالب را مطالعه کنيد.
delegate چيست؟
delegate ها type هايي هستند که اشياء آن ها مي توانند متد هاي کلاس هاي ديگر و متد هاي اشياء ديگر را فرخواني کنند. در واقع يک شيء از يک دليگيت براي فراخواني متد هاي کلاس ها و اشياء ديگر ايجاد مي شود.
چگونه يک delegate تعريف کنيم؟
من براي ايجاد يک delegate چهار مرحله در نظر مي گيرم.
- تعريف delegate یا Delegate Definition
- ايجاد reference از delegate یا Delegate Declaration
- ايجاد شيء یا Delegate Initialization
- فرخواني یا Calling
اجازه بدين اين مراحل را با يک مثال ساده بررسي کنيم.
مرحله اول بايد در namespace نوشته شود. همانند يک کلاس يا type هاي ديگر. وقتي مي خواهيم يک delegate را بنويسيم بايد بدانيم که اين delegate براي فراخواني چه متدهايي نوشته شده است.
همان طور که در تصوير مي بينيد من يک delegate را در فضاي namespace تعريف کرده ام. با توجه به کد نوشته شده ، اين delegate امکان فرخواني متد هايي را که خروجي ندارند (void) و همينطور هيچ پارامتري هم ندارند ، دارد. استفاده از کلمه CallBack در انتهاي نام delegate ها پيشنهاد مي شود.
حالا بايد يک reference از آن delegate ايجاد کنيم:
در مرحله سوم بايد اين reference را new کنيم:
در اين مرحله بايد شما نام يک متد و فقط نامش را به عنوان پارامتر به constructor اين delegate پاس دهيد. توجه کنيد که تمامي delegate ها داراي Constructorی با يک پارامتر مي باشند که اسم يک متد خواهد بود. متدي که پاس مي شود بايد دقيقا ساختاري شبيه به ساختار تعريف شده delegate شما (مرحله 1) داشته باشد.
مرحله آخر فراخواني delegate است:
وقتي يک شيء از يک delegate را با استفاده از () فراخواني مي کنيد در واقع متدي که داخل آن delegate تعريف شده است را فراخواني مي کنيد.
نکته مهم اين است که شما مي توانيد بيش از يک متد (با ساختار شبيه به هم) را داخل يک delegate قرار دهيد. براي اين کار به جاي استفاده از = موقع new کردن از =+ استفاده خواهيم کرد. وقتي اين delegate را فراخواني مي کنيد تمامي آن ها به ترتيب فراخواني خواهند شد.
دانلود مثال
ادامه دارد...
-
جمعه 19 مهر 1387, 10:08 صبح
#42
کاربر دائمی
آخرین ویرایش به وسیله Masoud_TB : شنبه 20 مهر 1387 در 07:49 صبح
-
سه شنبه 23 مهر 1387, 09:03 صبح
#43
کاربر دائمی
آموزش سی شارپ - نظرخواهي
با توجه به نزديک شدن به انتهاي آموزش هاي من در رابطه با برنامه نويسي شي گراء در سي شارپ ، از همه دوستان دعوت مي کنم که در راي گيري بنده در رابطه با ادامه اين سري آموزشي شرکت کنند تا سري جديد آموزشي بر مبناي نظرات شما صورت پذيرد.
لينک نظرخواهي: http://csharptuning.blogfa.com
طباطبايي
-
شنبه 27 مهر 1387, 14:58 عصر
#44
کاربر دائمی
آموزش سی شارپ - قسمت سي و ششم
رويداد ها در سي شارپ - Events in CSharp
اغلب نرم افزار هايي که توليد مي شوند ساختاري Event Driven1 دارند. به عنوان مثال شما يک فرم ايجاد مي کنيد و کاربر با پر کردن اطلاعات فرم و در نهايت کليک بر روي گزينه ذخيره فرم اطلاعاتي مورد نظر را ذخيره مي نمايد.
پر کردن فرم ، کليک بر روي گزينه Save و ... همگي رويداد هايي هستند که از طرف کاربر شما ارجاع مي شود و چک کردن اطلاعات و ذخيره کردن اطلاعات و ... هم پاسخ (عکس العمل) هاي شما به آن رويداد ها.
براي توليد و استفاده يک رويداد در سي شارپ 7 مرحله پياده سازي وجود دارد. 5 مرحله اول براي توليد رويداد (Event Raise) و 2 مرحله آخر براي پاسخ به رويداد (Event Handler) مي باشد.
در بررسي رويداد ها با يک مثال ساده شروع مي کنيم. يک انبار را در نظر بگيريد. در اين انبار وقتي تعداد يک کالا به صفر مي رسد يک رويداد بايد اعلام شود و در نتيجه آن رويداد مسئول انبار درخواست خريد چند آيتم از آن کالا را صادر خواهد کرد. کلاس انبار را به صورت زير تعريف ميکنم. براي ثبت محصول از متد AddProduct و براي دريافت کالا از متد GetProduct استفاده مي شود. در صورتيکه تعداد کالا به صفر برسد ، رويداد مورد نظر بايد اعلام شود.
براي تعريف رويداد ، ابتدا يک delegate تعريف مي کنيم (مرحله اول):
دقت کنيد که delegate هايي که به منظور توليد Event ها ايجاد مي شوند همواره داراي دو پارامتر مي باشند. پارامتر اول از نوع object که در واقع شيء است که رويداد بر روي آن اتفاق مي افتد. پارامتر دوم از نوع EventArgs یا کلاس هاي که از آن به ارث رفته باشد. پارامتر دوم در واقع اطلاعات يا آرگومان هاي رويداد مي باشد. 2
در مرحله دوم يک event در کلاس Warehouse تعريف مي کنيم (مرحل دوم):
در مرحله بعدي يک متد protected به نام OnLowAmount تعريف مي کنيم (مرحله چهارم3)
و سپس در زمان مناسب (موقعي که تعداد کالا به صفر برسد) رويداد را با استفاده از متد protected مرحله قبل اعلام مي کنيم (مرحله پنجم):
سپس شروع به استفاده از اين کلاس خواهم کرد:
همانطور که مي بينيد در اين کلاس رويداد LowAmount به صورت يک Event (با شکلي شبيه علامت برق) مشخص شده است.
مرحله بعدي ايجاد يک متد است که با ساختار delegate رويداد مورد نظر مطابقت داشته باشد (مرحله ششم):
و در نهايـت وصل کردن اين متد (مرحله ششم) به رويداد با استفاده از =+ مي باشد. (مرحله هفتم):
دقت فرمائيد که در صورتيکه تمايل داشته باشيد مي توانيد بيش از يک متد را داخل رويداد خود به عنوان EventHandler قرار دهيد:
2. به عنوان مثال در رويداد KeyDown بر روي کلاس Form از کلاس KeyٍEventArgs استفاده شده است.
3. در اين مثال نيازي به وجود مرحله سوم نمي باشد.
دانلود مثال اين قسمت
ادامه دارد...
آخرین ویرایش به وسیله Masoud_TB : یک شنبه 28 مهر 1387 در 18:01 عصر
دلیل: لينک دانلود تصحيح شد
-
یک شنبه 03 آذر 1387, 11:32 صبح
#45
کاربر دائمی
آموزش سي شارپ - قسمت سي و هفتم
رويداد ها و آرگيومنت هاي خاص - Event and Custom EventArgs
بسیاري از رويداد ها در هنگام وقوع داراي جزئياتي مي باشند. به عنوان مثال رويداد MouseMouse داراي اطلاعات همچون محل Cursor موس مي باشد يا در رويداد KeyDown کليدي که تايپ شده است از اطلاعات خاص اين رويداد است. ايجاد رويداد ها و پاس کردن اطلاعات خاص آن رويداد ها توسط کلاس هايي که از کلاس پايه اي به نام EventArgs به ارث رفته اند ، اعلام مي گردد.
براي بررسي اين موضوع از يک مثال استفاده مي کنيم. فرض کنيد که در مثال قبلي مي خواهيد که در موقع بروز رويداد LowAmount امکان جلوگيري از خريدي در حال وقوع را داشته باشيم. پس شما بايد يک متغيير boolean در پارامتر هاي رويدادتان به نام Cancel تعريف کنيد که در صورتي که توسط متد EventHandler به True ست شده باشد بايد از خريد جلوگيري نمائيد.
براي اجراء اين موضوع يک کلاس به نام LowAmountEventArgs تعريف مي کنيم (اين کلاس از کلاس EventArgs به ارث مي رود) و در آن يک متغيير به نام Cancel از جنس bool تعريف مي کنم:
سپس delegate مربوط به رويداد را به صورت زير تغيير مي دهم:
همچنين در زمان رويداد يک شيء از جنس LowAmountEventArgs ايجاد مي کنم:
حالا در زمان رويداد اين امکان وجود دارد که کاربر از ثبت اين برداشت از انبار جلوگيري کند. براي اين کار کافيست که کاربر شما در event handler مربوط به استفاده از متغيير موجود مقدار Cancel را به True ست کند.
نمونه هاي بسياري از اين نوع رفتار ها در دات نت وجود دارد ، به عنوان مثال در کلاس Form در Windows Application وقتي درخواست بسته شدن فرم از طرف کاربر ارسال مي شود ، يک رويداد به نام FormClosing رخ مي دهد ، در صورتيکه شما يک EventHandler براي اين رويداد بنويسيد مي توانيد با ست کردن متغيير Cancel در کلاس FormClosingEventArgs مي توانيد مانع از بسته شدن فرم شويد.
دانلود مثال اين پست
-
سه شنبه 26 آذر 1387, 12:00 عصر
#46
کاربر دائمی
نقل قول: آموزش سی شارپ
سلام بر همه دوستان ، با توجه به اتمام اين سري از مقالات آموزشي من ، ادامه آموزش هاي بنده در رابطه با آموزش برنامه نويسي تحت ويندوز با سي شارپ رو مي تونين از طريق اين لينک پيگيري کنيد.
https://barnamenevis.org/showthread.php?t=136411
-
پنج شنبه 28 مرداد 1389, 19:16 عصر
#47
کاربر جدید
نقل قول: آموزش سی شارپ
سلام
چرا سایت آقای مسعود طباطبایی باز نمی شه؟
-
پنج شنبه 06 مرداد 1390, 16:58 عصر
#48
کاربر دائمی
نقل قول: آموزش سی شارپ
عکس ها نمایش داده نمیشه.لینک pdf هم باز نمیشه.
کسی فایلای pdf و از قبل داره بذاره برای دانلود؟
-
چهارشنبه 12 مرداد 1390, 11:54 صبح
#49
کاربر جدید
نقل قول: آموزش سی شارپ
عكس ها تركيده !! 
كسي اين آموزش رو نداره ؟ كه درست باشه ؟
-
سه شنبه 24 آبان 1390, 19:03 عصر
#50
کاربر جدید
نقل قول: آموزش سی شارپ
حق با دوستان pdf دانلود نمی شه عکسها هم باز نمی شه.
-
چهارشنبه 21 تیر 1391, 15:44 عصر
#51
کاربر جدید
نقل قول: آموزش سی شارپ
دوستان گلم یه سوال داشتم توی ENUMتایپ ذاتی رو به چه نوع تایپهایی می تونیم تغییر بدیم ؟؟؟؟
public enum x : byte
به جای این بایت از چه متغیرهای دیگه ای می تونیم استفاده کنیم ؟
-
جمعه 11 تیر 1395, 15:12 عصر
#52
کاربر جدید
نقل قول: آموزش سی شارپ - قسمت ششم
enumeration یا داده های شمارشی همانطور که دوستمون توضیح دادن برای دخیره کردن یک سری اطلاعات بصورت شماره در یک متغغیره. متغغیر شمارشی داده های بصورت ارجاعی داخل یک سری اعداد از نوع int ذخیره میکنه و شما میتونید هر موقع خواستین اوونا رو فراخوانی کنید.
قوانین ایجاد تاپیک در تالار
- شما نمی توانید تاپیک جدید ایجاد کنید
- شما نمی توانید به تاپیک ها پاسخ دهید
- شما نمی توانید ضمیمه ارسال کنید
- شما نمی توانید پاسخ هایتان را ویرایش کنید
-
قوانین سایت