آموزش زبان سی‌شارپ C# – بخش ۳۷

آموزش زبان سی‌شارپ C# – بخش ۳۷
  • 1392/4/3
  • Jeff Mosawy
  • 18
  • مقدمه

تا کنون یک آشنایی مختصری با متدها (Methods) پیدا کردید و می‌دانید که تقریباً مزیت‌های یک متد چیست؛ مثلاً بجای اینکه چندین بار تابع اضافه کردن به یک لیست خاصی را بنویسیم، آن را یک بار توسط یک متد تعریف می‌کنیم و می‌توانیم هرچند باری که بخواهیم از آن استفاده کنیم.

در این بخش، با موضوع پاس دادن مقدارهای معینی به متد آشنا خواهیم شد. شما هنگامی که یک متد (یا همان تابع) را وقتی که بنویسید، می‌توانید مقدارهای معینی را به تابع پاس دهید تا عملیات خاصی رو آن انجام دهید.

همچنین می‌توانیم مقادیر خاصی را که در تابع بدست آمده، توسط دستوری آن را برگردانیم

  • پاس دادن مقادیر خاصی به متد؛ برگرداندن مقدار معین

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

باید بدین شکل عمل کنیم که عددهایی که در Text Box ها وارد می‌شوند را دریافت کرده؛ در متغیرهایی ذخیره کرده، به تابع پاس دهیم و عملیات جمع را در داخل تابع انجام دهد و در نهایت مقدار مورد نیاز خودمان را «برگرداند.»

به مقادیری که به متدها پاس داده می‌شود، اصطلاحاً آرگومان‌های یک متد می‌گویند. برای تعریف آرگومان‌هایی به تعداد مورد نیاز به شکل زیر عمل می‌کنیم (تعریف دو آرگومان؛ یعنی دو مقدار را می‌خواهیم به متد پاس دهیم):

void AddUp(int Num1, int Num2)

{

            …

}

آیا به مقادیری که در داخل پرانتزها در هنگام تعریف تابع اختصاص داده‌ایم دقت می‌کنیم؟ اینها آرگومان‌های تابع هستند. به تعداد مورد نیاز آن‌ها را توسط یک کاما (,) جدا کرده و فراموش نشود که نوع هر کدام از آرگومان‌ها قبل از نام متغیر آن‌ها نوشته شود. مثلاً‌ ما می‌توانستیم که به شکل زیر تابع را تعریف کنیم:

void AddUp(float Num1, float Num2)

{

            …

}

دقت کنید که نام‌هایی که برای متغیرهای Num1 و Num2 در نظر گرفته‌ایم یک متغیرهای موقتی هستند. در هنگام استفاده از این تابع نیز باید به این مورد دقت داشته باشیم که هر نوعی که در هنگام تعریف تابع برای آرگومان‌ها در نظر گرفتیم، می‌بایست که در هنگام پاس دادن مقادیر به این تابع، از همان نوع استفاده کنیم. (int به int – Float به Float و …)

حال متد خودتان را که قبلاً با نام AddUp تعریف کرده بودید را به شکل زیر تغییر دهید:

1-methodAddUp3

همانطور که می‌بینید، ما در اینجا دو آرگومان برای این تابع تعریف کرده‌ایم؛ FirstNumber و secondNumber. اینها همان مقادیری “خواهند بود” که بعداً به متد پاس می‌دهیم و روی آن‌ها پردازش انجام می‌دهد. حال نوبت به انجام پرداش می‌رسید؛ کدهای این متد را به شکل زیر بروزرسانی کنید:

2-methodAddUp4

در واقع ما اینجا کاری که کردیم بدین شکل بود؛ یک متغیر در داخل متد تعریف کردیم با نام answer که حاصل جمع دو عدد را به ما در انتها که کار متد AddUp به اتمام می‌رسد را به ما برگرداند. فعلاً چونکه تابع ما از نوع void هست، هیچ مقداری را بر نمی‌گرداند؛ بلکه ما الان با استفاده از MessageBox در حال نمایش مقدار answer هستیم؛ و نه برگرداندن مقدار آن!

اگر که به کدهای اصلی مربوط به button1 برگردیم، می‌بینید که:

3-methodAddUp5

اگر به این error دقت کنید به را به شما می‌گوید که: «هیچ تعریفی برای این تابع صورت نگرفته است که هیچ آرگومانی را نگیرد.»

حالا چرا این خطا را به ما نشان می‌دهد؟ ما در تعریف تابع خود دو آرگومان در نظر گرفتیم (آرگومان‌هایی با نام‌های firstNumber و secondNumber) ولی در اینجا ما در بین جفت پرانتز‌ها هیچ مقداری به تابع پاس نداده‌ایم؛ لذا این خطا را از ما می‌گیرد.

کدهای خود را به شکل زیر تغییر دهید:

4-methodAddUp6

حال کدهای ما به‌شکل صحیحی نوشته شده‌اند. به عکس زیر دقت کنید تا منظور را بهتر متوجه شوید:

5-methodAddUp7

حال شما می‌توانید حتی کدهای داخل button1 را نیز به شکل زیر تغییر دهید که در واقع در حال دریافت مقادیر از Textbox ها می‌باشیم:

6-methodAddUp8

یا می‌توانید آن‌ها را در متغیرهایی ذخیره کرده و سپس از آن‌ها استفاده کنید:

7-methodAddUp9

دقت کنید که هیچ لازم نیست اسامی متغیرهای آرگومان‌های ما با نام متغیرهایی که به متد در حال پاس دادن هستیم یکی باشد!

حال نوبت به برگرداندن مقدار از تابع می‌رسد. متدهایی که تا الان تعریف کردیم، دارای یک کلمه‌کلیدی‌ای به نام void بودند؛ void یعنی خالی و اصطلاحاً به متدهایی می‌گویند که هیچ مقداری را برنمی‌گرداند. اگر می‌خواهید که تابع شما مقداری را برگرداند،‌ می بایست که به‌جای void، نوع مقداری را که می‌خواهید برگرداند را بنویسید؛ مثلاً int.

یک متد جدید طبق تصویر زیر با نام Subtract تعریف کنید:

8-methodSubtract

اگر کمی کدهای خودمان را مرتب‌تر کنیم، به شکل زیر خواهند بود:

9-methodSubtract2

پیش آن‌ها کدها را شرح دهیم، بر روی کلید مربوط به Subtract دابل-کلیک کنید تا وارد کدهای مربوط به آن شوید؛ کدهای زیر را به آن اضافه کنید:

10-methodSubtract3

ما کدهای مربوط به این بخش از کلید را در مرحله بعد توضیح می‌دهیم؛ فعلاً فقط برنامه را اجرا کنید؛ امیدوارم که نتیجه جواب نمایش داده شده درست باشد …

خوب؛ نگاهی به متد جدیدمان بیندازیم:

private int Subtract(int firstNumber, int secondNumber)

آرگومان‌های داخل پرانتز دقیقاً شبیه به متدهای قبل بود و دقیقاً به همان شکل عمل میکند؛ دو مقدار را بعنوان آرگومان از کدها می‌گیرد. چیزی که در این بخش جدید است، قسمت زیر می‌باشد:

private int Subtract

کلمه Subtract که تنها نام تابع است، اما قبل از خود نام تابع، دو کلمه کلیدی مهمی داریم؛ int و private. کلمه کلیدی private را برای حال فراموش کنید، در آینده به این موضوع خواهیم پرداخت، اما در رابطه با int، ما از آن بجای کلمه void استفاده کردیم، در واقع بجای اینکه هیچ مقداری را برنگرداند، بلکه یک مقداری را که از نوع int می‌باشد را برگردانیم.

مجدداً به کدهای زیر نگاه کنید:

11-methodSubtract

به خط آخر دقت کنید:

return answer;

نوع answer چیست؟ int! پس باید نوعی مقداری که در حال برگرداندن هستیم با کلمه کلیدی قبل از نام تابع یکی باشد! این دقیقاً مقداری می‌باشد که تابع آن را برگردانده است! (یعنی خواهد برگرداند)

خوب، اما از این return کجا استفاده کردیم؟ کد زیر را ببینید:

private void button2_Click(object sender, EventArgs e)

{

            int number1;

            int number2;

            int returnValue=0;

            number1 = int.Parse(textBox1.Text);

            number2 = int.Parse(textBox2.Text);

            returnValue = Subtract(number1, number2);

            messageBox.Show(returnValue.ToString());

}

در واقع بدین اتفاقات بدین شکل در حال انجام شدن هستند؛ مقداری را که تابع Subtract برمی‌گرداند باید در جایی ذخیره شد، لذا متغیری با هم از همان نوع (در اینجا int) ساخته شود تا جواب مربوط به مقدار برگرداندن متد در آن ذخیره شد.

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

دیدگاه خود را وارد کنید
تعداد دیدگاه ها : 18 دیدگاه
    1. سلام دوست عزیزم،

      چشم؛ PDF رو قرار خواهم داد.
      موفق باشید!

    2. سلام
      میخواستم بدونم کلا چند قسمته؟
      در آخر قسمت آخر به قول دوستمون PDF ، M رو هم قرار بدید

    3. سلام دوست عزیزم،

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

  1. سلام آقای موسوی می خواستم بدانم از کجا می توانم کتاب “چگونه با سی شارپ 2010 برنامه بنویسم” نوشته برادران دیتیل را به زبان اصلی تهیه نمایم کتاب فارسی اون رو انتشارات ناقوس منتشر کرده است

    1. سلام دوست عزیزم،

      آیا شما به دنبال تهیه خود کتاب اصلی هستید و یا نسخه PDF آن؟ اگر به دنبال نسخه PDF هستید، می‌توانید که در اینترنت نام کتاب را به انگلیسی جستجو کنید؛ اما در صورتی که به دنبال تهیه کتاب اصلی هستید، بعید بدانم که داخل ایران بتوانید کتاب اصلی را پیدا کنید، می‌بایست که از خارج از کشور سفارش دهید (و یا از طریق خود سایت اصلی از طریق پست بین‌المللی برایتان پست کنند)
      موفق باشید!

    2. آقای موسوی از اینکه وقت میذارین و جواب میدین ازتون ممنونم،من آموزشاتون رو دنبال میکنم و منتظرم که به شی گرایی برسین، و اگر بتونین زودتر این مبحث رو شروع کنین ممنون میشم، که بعدش انشاءالله برنامه نویسی چند لایه را شروع کنین.

    3. سلام دوست عزیزم،

      خواهش می‌کنم؛ من همیشه در تلاشم که هر بخش آموزشی رو در سریع‌ترین زمان ممکن آماده کنم؛ انشاءالله سعی می‌کنم که بخش بعدی در روز شنبه (و یا یکشنبه) منتشر بشه.
      مباحث شی‌گرایی قطعاً مهم‌ترین بخش آموزش من خواهد بود؛ چرا که کل سی‌شارپ به شی‌گرا بودن آن معنی پیدا می‌کند. برنامه‌نویسی چندلایه رو خیلی دوست دارم که برسم و آموزش بدم (خصوصاً ۳ لایه) ولی بعید بدونم که بتونم در اینجا جا بدم، چرا که نوشتن متن آموزش آن به‌شکلی که بصورت مفهوم قابل خواندن باشد کمی سخت خواهد بود، اما اگر آموزش‌ها تمام شود، حتماً اشاره‌ی کوچکی به برنامه‌نویسی چندلایه خواهم کرد تا دوستان یک تصویر ذهنی از آن داشته باشند.

      موفق باشید!

  2. سلام خیلی اتفاقی با سایت تون اشنا شدم وب سایت خیلی عالی دارید.
    و ممنون بابت pdf های اموزشی تون.منتظر اموزش های بعدی هستیم
    و موفق باشید….

    1. سلام دوست عزیزم،

      خوشحالم که راضی هستید؛ موفق باشید!

  3. سلام آقای موسوی عزیز، می خواستم بدونم با توجه به کمبود وقتتون، اگه بنده قسمت های بعدی آموزش C# رو که تو سایت Homeandlearn هستش رو ترجمه کردم، بعد براتون میل کنم تا شما تو سایت بزارین؟

    1. سلام دوست عزیزم،

      من متأسفانه امشب، آخرین شبی خواهد بود که می‌تونم مطلب ارسال کنم و پس از آن، باید تا تاریخ ۱۶ تیر صبر کنید؛ چونکه بدلیل یک سری مشغله خارج از تهران خواهم بود و هیچ‌گونه دسترسی‌ای به اینترنت، سایت، ایمیل و … نخواهم داشت.
      اگر فرصت کردم امشب دو جلسه از آموزش رو آماده می‌کنم که تا ۱۶ تیر که برگشتم، مجدداً شروع کنم.

      موفق باشید!

    2. سلام دوباره، فکر می کنم اشتباه متوجه شدید، منظورم اینه که اگه بخش های بعدی رو خودم ترجمه کردم، براتون میل بکنم یا نه؟ (که شمام بعد از بازبینی اون رو بذارین تو سایت)

    3. سلام دوست عزیزم،

      من منظور شما رو متوجه شدم؛ اما من تا ۱۶ تیر اصلاً دسترسی به هیچ چیزی ندارم! یعنی در واقع ایمیل کردن ترجمه‌ی مطالب برای من کار بی‌فایده‌ای خواهد بود. بعد اگر تک تک بخش‌های آموزشی من رو با سایت homeandlearn مقایسه کنید، متوجه می‌شید که بعضی مواقع قسمت‌هایی را از آموزش حذف و یا به آموزش اضافه می‌کنم؛ چونکه احساس می‌کنم بعضی چیزها بی‌مورد و بعضی موارد مهم هستند.
      ممنونم از لطفی که به من دارید.
      موفق باشید!

    1. تمامی بخش ها را می توانید در لینک مربوطه ببنید

  4. سلام خسته نباشید
    غک کنم سوالم مربوط به این بخش نباشه ولی ممنون میشم جواب بدبد
    من یه رندم ساختم ۴رقمی
    ۴ تا هم اینت تعریف کردم که کاربر وارد کنه
    میخاستم بدونم چجوری اینت های کاربر رو با تک تک اعضای رندم مطابقت بدم؟؟

  5. سلام خسته نباشید.خیلی ممنون بابت آموزش های خوبتون اما چرا آموزش رو تکمیل نکردید؟تا جلسه ۷۳ رفتید اما بعد ول کردید.اگه میشه آموزش رو تکمیل کنید خیلی ممنون 🙂

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *