صفحه 2 از 2 اولاول 12
نمایش نتایج 41 تا 52 از 52

نام تاپیک: آموزش سی شارپ

  1. #41
    کاربر دائمی آواتار Masoud_TB
    تاریخ عضویت
    آذر 1386
    محل زندگی
    Tehran
    پست
    165

    Lightbulb آموزش سی شارپ - قسمت سي و چهارم

    Delegates in CSharp
    بعد از بررسی اينترفيس ها بايد به بررسي دليگيت ها بپردازيم. براي اين بررسي ابتدا من يک تعريف از Delegate خواهم گفت. سپس به روش ايجاد (Syntax) دليگيت ها مي بپردازم و در نهايت به دلايل استفاده یا مثال هاي آن خواهم پرداخت. لطفا سعي کنيد که در بررسي delegate ها کمي حوصله کنيد و با دقت مطالب را مطالعه کنيد.

    delegate چيست؟
    delegate ها type هايي هستند که اشياء آن ها مي توانند متد هاي کلاس هاي ديگر و متد هاي اشياء ديگر را فرخواني کنند. در واقع يک شيء از يک دليگيت براي فراخواني متد هاي کلاس ها و اشياء ديگر ايجاد مي شود.

    چگونه يک delegate تعريف کنيم؟
    من براي ايجاد يک delegate چهار مرحله در نظر مي گيرم.

    1. تعريف delegate یا Delegate Definition
    2. ايجاد reference از delegate یا Delegate Declaration
    3. ايجاد شيء یا Delegate Initialization
    4. فرخواني یا 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 را فراخواني مي کنيد تمامي آن ها به ترتيب فراخواني خواهند شد.



    دانلود مثال
    ادامه دارد...

  2. #42
    کاربر دائمی آواتار Masoud_TB
    تاریخ عضویت
    آذر 1386
    محل زندگی
    Tehran
    پست
    165

    Lightbulb آموزش سی شارپ - قسمت سي و پنجم

    در مثال قبلی در رابطه با چهار مرحله توليد و استفاده يک Delegate صحبت کرديم. دقت کنيد که معمولا مراحل توليد يک delegate کنار همديگر استفاده نمي شود. و اين مراحل بين چندين کلاس پخش مي شود تا استفاده اصلي آن مشخص شود.

    اجازه بدين با يک مثال ادامه بديم:

    يک بانک را در نظر بگيريد. مشريان اين بانک داراي اعتبار مشخصي مي باشند. در هنگام خريد اين اعتبار کمتر و کمتر خواهد شد. اين بانک داراي n بازرس است که در سطح شعب مختلف فعاليت مي کنند. بازرسان بانک وظيفه پيگيري وضعيت اين مشتري را دارند. پس وقتي خريد مشتري از اعتبارش بيشتر مي شود بايد اطلاعات مشتري به تمامي بارزسان اعلام شود تا پيگيري هاي لازم توسط نزديک ترين بازرس انجام شود.

    خوب پس من يک کلاس خواهم داشت به نام Customer و يک کلاس هم به نام Agent:



    همانطور که مي بينيد کلاس Customer داراي يک متد به نام Buy است که از اين طريق خريد انجام مي شود. نکته مهم اين است که بايد کدي بنويسيم که وقتي يک مشتري خريد مي کند تمام بازرسان متوجه خريد بيش از اعتبار وي شوند.



    در کلاس Agent يک ArrayList براي ثبت فعاليت هاي هر يک از بازرسان در نظر گرفته شده است که براي ثبت پيگيري جديد بايد از متد AddTask استفاده شود. پس ما بايد به طريقي AddTask تمامي بازرسان را همزمان و در متد Buy کلاس Customer فراخواني کنيم.

    براي انجام اين موضوع من يک Delegate متناسب با متد AddTask ايجاد مي کنم (مرحله اول).



    حالا در کلاس Agent يک متغيير static (براي همه بازرسان) از جنس آن delegate ايجاد مي کنم. (مرحله دوم)
    سپس در Constructor کلاس Agent متد AddTask هر يک از بازرسان را در delegate ثبت مي کنم. (مرحله سوم).

    در نهايت موقعي که اعتبار مشتري من منفي مي شود delegate static را فراخواني مي کنم. در نتيجه به تمامي بازرسان يک وظيفه جديد اضافه خواهد شد.


    و حالا کافيست چند شيء از هر کدام از کلاس ها بسازم و شروع به تست کنم:



    و در نتيجه:




    اين مثال را مرور کنيد. مسلما براي دوستاني که تازه با سي شارپ آشنا شده اند خيلي سنگين خواهد بود. اصلا مهم نيست کافيه که توي ذهنتون چند باري مرورش کنيد. به نظر من delegate سنگين ترين بحث سي شارپ است. پس اصلا به خودتون شک نکنيد!

    بارگزاري مثال

    ادامه دارد....
    آخرین ویرایش به وسیله Masoud_TB : شنبه 20 مهر 1387 در 07:49 صبح

  3. #43
    کاربر دائمی آواتار Masoud_TB
    تاریخ عضویت
    آذر 1386
    محل زندگی
    Tehran
    پست
    165

    آموزش سی شارپ - نظرخواهي

    با توجه به نزديک شدن به انتهاي آموزش هاي من در رابطه با برنامه نويسي شي گراء در سي شارپ ، از همه دوستان دعوت مي کنم که در راي گيري بنده در رابطه با ادامه اين سري آموزشي شرکت کنند تا سري جديد آموزشي بر مبناي نظرات شما صورت پذيرد.

    لينک نظرخواهي: http://csharptuning.blogfa.com
    طباطبايي

  4. #44
    کاربر دائمی آواتار Masoud_TB
    تاریخ عضویت
    آذر 1386
    محل زندگی
    Tehran
    پست
    165

    Lightbulb آموزش سی شارپ - قسمت سي و ششم

    رويداد ها در سي شارپ - 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 عصر دلیل: لينک دانلود تصحيح شد

  5. #45
    کاربر دائمی آواتار Masoud_TB
    تاریخ عضویت
    آذر 1386
    محل زندگی
    Tehran
    پست
    165

    Lightbulb آموزش سي شارپ - قسمت سي و هفتم

    رويداد ها و آرگيومنت هاي خاص - 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 مي توانيد مانع از بسته شدن فرم شويد.

    دانلود مثال اين پست

  6. #46
    کاربر دائمی آواتار Masoud_TB
    تاریخ عضویت
    آذر 1386
    محل زندگی
    Tehran
    پست
    165

    نقل قول: آموزش سی شارپ

    سلام بر همه دوستان ، با توجه به اتمام اين سري از مقالات آموزشي من ، ادامه آموزش هاي بنده در رابطه با آموزش برنامه نويسي تحت ويندوز با سي شارپ رو مي تونين از طريق اين لينک پيگيري کنيد.

    https://barnamenevis.org/showthread.php?t=136411

  7. #47

    نقل قول: آموزش سی شارپ

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

  8. #48

    نقل قول: آموزش سی شارپ

    عکس ها نمایش داده نمیشه.لینک pdf هم باز نمیشه.
    کسی فایلای pdf و از قبل داره بذاره برای دانلود؟

  9. #49

    نقل قول: آموزش سی شارپ

    عكس ها تركيده !!
    كسي اين آموزش رو نداره ؟ كه درست باشه ؟

  10. #50

    نقل قول: آموزش سی شارپ

    حق با دوستان pdf دانلود نمی شه عکسها هم باز نمی شه.

  11. #51

    نقل قول: آموزش سی شارپ

    دوستان گلم یه سوال داشتم توی ENUMتایپ ذاتی رو به چه نوع تایپهایی می تونیم تغییر بدیم ؟؟؟؟
    public enum x : byte
    به جای این بایت از چه متغیرهای دیگه ای می تونیم استفاده کنیم ؟

  12. #52
    کاربر جدید
    تاریخ عضویت
    اسفند 1393
    محل زندگی
    زاهدان
    پست
    8

    نقل قول: آموزش سی شارپ - قسمت ششم

    enumeration یا داده های شمارشی همانطور که دوستمون توضیح دادن برای دخیره کردن یک سری اطلاعات بصورت شماره در یک متغغیره. متغغیر شمارشی داده های بصورت ارجاعی داخل یک سری اعداد از نوع int ذخیره میکنه و شما میتونید هر موقع خواستین اوونا رو فراخوانی کنید.

صفحه 2 از 2 اولاول 12

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •