درخواست های ارتباط
جستجو تنظیمات
لیست دوستان من

آموزش زبان سی شارپ - قسمت دهم :: آشنایی با متدها در زبان سی شارپ (بخش اول)

4 نظرات

با سلام مجدد به دوستان عزیزم در انجمن تخصصی فناوری اطلاعات ایران. در ادامه مباحث آموزشی زبان سی شارپ به مبحث متدها و شیوه استفاده از آنها خواهیم پرداخت. اما متدها چه استفاده ای در زبان سی شارپ دارند؟ زمانی که ما برنامه ای را می نویسیم با زیاد شدن حجم کد نوشته شده، میزان خوانایی و درک از کد نوشته شده کاهش میابد. فرض کنید برنامه ای در کنسول نوشتیم که تعداد خطوط کد بالای 5000 خط بوده و کل کدهای آن را در متد Main که در بخش های ابتدایی این سری آموشی با آن آشنا شدیم نوشته ایم. پس از مدتی، قصد داریم قسمتی از کد را تغییر دهیم یا امکان جدیدی به برنامه اضافه کنیم. صد در صد کار نگهداری و خطایابی برنامه ای که نوشته ایم مشکل خواهد بود. زیرا تمامی کدها در یکجا نوشته شده و برنامه نویس برای پیدا کردن و مدیریت کدها به مشکل بر خواهد خورد. برای حل این مشکل باید کدها را از لحاظ کاربردی به قسمت های مختلف تقسیم کنیم. این تقسیم بندی با کمک متدها انجام می شوند. در حقیقت متدها قطعه کدهایی هستند که هر یک، وظیفه ای مشخص را در برنامه ما انجام می دهند. در این قسمت هدف آشنایی با کاربرد متدها می باشد که با مباحث زیر آشنا خواهیم شد:

  1. شیوه تعریف متدها

  2. پارامترها و مقادیر بازگشتی

  3. آشنایی با عبارات ref و out

  4. آشنایی با مفهوم method overloading

  5. نوشتن توابع بازگشتی (Recursive Functions)


شیوه تعریف متدها


در قسمت های قبلی، با متد Main که نقطه شروع برنامه های سی شارپ می باشد آشنا شدیم. در زبان سی شارپ ما می توانیم متدهای مورد نظر خودمان را ایجاد کنیم. زمان تعریف متدها به این نکته باید توجه داشت که هر متد باید یک وظیفه خاص را انجام دهد. در قسمت زیر با شیوه نوشتن متدها آشنا می شویم:

{modifier} [static] {return-type} {name}({parameters})
{
    // method body
}
  1. {modifier}: این بخش نمایانگر سطح دسترسی به متد می باشد. زمانی که ما کدی می نویسیم باید سطح دسترسی به آن قطعه کد را مشخص کنیم. برای مثال متد Main سطح دسترسی public دارد، یعنی از هر نقطه ای از برنامه می توان به آن دسترسی داشت. سطوح دسترسی به شیوه های مختلف تعریف می شوند که در قسمت های بعدی با آنها آشنا می شویم. در حال حاضر برای تمام متدها از کلمه کلیدی public یا عمومی استفاده می کنیم.

  2. [static]: در زبان سی شارپ، ما مفهومی داریم به نام کلاس ها که اشیاء از روی آنها ساخته می شوند، زمانی که ما متدی را با کلمه static مشخص می کنیم، می گوییم این متد خارج از نمونه های ساخته شده از آن کلاس قابل استفاده باشند. نوشتن کلمه کلیدی static برای متدها اختیاری می باشد. توجه داشته باشید. در حال حاضر ما تمامی متدهایی که می نویسیم زیر متد Main تعریف می شوند و باید از نوع static باشند، زیرا تنها متدهای static را می توان از داخل متد Main صدا زد.

  3. {return-type}: در این قسمت ما باید نوع بازگشتی متد را مشخص کنیم. متدها می توانند نوع بازگشتی داشته باشند یا نداشته باشند. برای مثال زمانی که ما متدی می نویسیم که نوع بازگشتی آن string است، جای {return-type} کلمه کلیدی string را می نویسیم. اگر متد نوع بازگشتی نداشته باشد از کلمه void برای مقدار بازگشتی استفاده می کنیم. مقدار مورد نظر داخل بدنه متد با کلمه کلیدی return برگردانده می شود. متدهایی که نوع بازگشتی دارند، باید داخل بدنه مقداری را برگردانند.

  4. {name}: در این قسمت نام متد را مشخص می کنیم، نام متد هر نامی می تواند باشد، اما قواعد نامگذاری متغیرها در قسمت متدها نیز صدق می کنند.

  5. {parameters}: در این قسمت ما پارامترهای ورودی متدها را مشخص می کنیم. یک متد می تواند شامل یک یا چندین پارامتر ورودی باشد یا اصلاً ورودی نداشته باشد.

  6. بدنه متد، مجموعه کدهایی است که با صدا زدن نام آن متد می خواهیم اجرا شوند، این کدها باید بین علامت های { و } قرار گیرند.

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

private static void Main(string[] args)
{
    DisplayMessage();
}

public static void DisplayMessage()
{
    Console.WriteLine("Welcome to C# Course...");
}

در نمونه کد بالا، متدی با نام DisplayMessage تعریف کردیم که داخل آن پیغامی بر روی صفحه کنسول نمایش داده می شود. در داخل متد Main هم متد DisplayMessage را فراخوانی کردیم. دقت کنید که برای فراخوانی متد باید پس از نام متد حتماً () را قرا دهیم. در این متد به دلیل اینکه ما پارامتری برای متد تعریف نکردیم داخل پرانتز هیچ چیز نمی نویسیم، اما اگر پارامتری تعریف شده بود، داخل پرانتز باید مقادیر هر پارامتر را مشخص می کردیم که در قسمت بعدی شیوه تعریف پارامترها را با هم بررسی می کنیم.


نحوه استفاده پارامتر ها در متدها


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

private static void Main(string[] args)
{
    DisplayMessage("Hossein","Ahmadi");
}

public static void DisplayMessage(string firstName, string lastName)
{
    Console.WriteLine("Welcome dear " + firstName + " " + lastName);
}

در نمونه کد بالا، متدی تعریف کردیم با نام DisplayMessage که دو پارامتر از نوع string با نام های firstName و lastName به عنوان ورودی دریافت می کند. سپس داخل بدنه متد، پیغامی حاوی نام و نام خانوداگی که به عنوان پارامتر پاس داده شده است را در خروجی نمایش می دهیم.

برای فراخوانی متد، در متد Main داخل پرانتز پس از نام متد باید لیست مقادیر مورد نظر برای هر پارامتر را بنویسیم. دقت کنید که ترتیب نوشتن مقادیر برای پارامترها با لیست تعریف پارامترها باید یکسان باشد. همچنین باید تعداد مقادیر ورودی هنگام فراخوانی متد با تعداد پارامترهای مشخص شده برای آن یکسان باشد. در غیر اینصورت با پیغام خطا مواجه خواهید شد. البته راهیی وجود دارد که از نوشتن مقادیر برای برخی پارامترها خودداری کرد و آن استفاده از مقادیر پیش فرض برای پارامترها می باشد.

مقادیر پیش فرض برای پارامترها

زمانی که قصد تعریف کردن متدی را داریم، می توانیم برای پارامترهای آن متد مقادیر اولیه ای را مشخص کنیم. برای آشنایی بیشتر به مثال زیر توجه کنید:

private static void Main(string[] args)
{
    DisplayMessage("Hossein");
}

public static void DisplayMessage(string firstName, string lastName = "Ahmadi")
{
    Console.WriteLine("Welcome dear " + firstName + " " + lastName);
}

در مثال بالا، هنگام تعریف متد DisplayMessage برای پارامتر lastName مقدار پیش فرض Ahmadi را مشخص کردیم. با این کار می توانیم از نوشتن مقدار پارامتر lastName هنگام فراخوانی متد خودداری کنیم. در حقیقت نوشتن مقدار برای این پارامتر دلخواه بوده و در صورت نوشته نشدن مقدار پیش فرض جایگزین خواهد شد. دقت کنید که زمان مشخص کردن مقادیر پیش فرض، تنها انتهایی ترین پارامترها می توانند مقدار پیش فرض داشته باشند، در غیر اینصورت پیغام خطا دریافت خواهد کرد. به عنوان مثال:

public static void Test(int a, int b = 12, int c)
{
}

کد بالا صحیح نمی باشد، زیرا علاوه بر پارامتر b باید پارامتر c نیز مقدار اولیه داشته باشد تا پیغام خطا دریافت نکنیم.

مقدار دهی پارامتر ها با استفاده از نام

هنگامی که متدی با چندین پارامتر تعریف میکنیم، می توان مقدار دهی پارامترها را بر اساس نام پارامتر انجام داد. متد زیر را در نظر بگیرید:

public static void Test(int a, int b, int c, int d)
{
}

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

Test(b: 12, d: 1, a: 18, c: 9);

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


مقادیر بازگشتی از متدها


یکی از موارد استفاده از متدها، گرفتن خروجی از یک متد است. یعنی متد بعد از انجام یکسری کارها یک خروجی برای ما بر میگرداند. برای استفاده از مقادیر خروجی، باید ابتدا نوع خروجی متد را هنگام تعریف آن مشخص کرد. تا این لحظه متدهایی که نوشتیم مقادیر بازگشتی آنها از نوع void بود، یعنی مقدار بازگشتی نداشتند. اما فرض کنید می خواهیم متدی بنویسیم که دو عدد را به عنوان ورودی دریافت کرده و به عنوان خروجی حاصل جمع آنها را برگرداند. برای اینکار نیاز به یک مقدار خروجی داریم. به مثال زیر توجه کنید:

public static int Sum(int n1, int n2)
{
    var result = n1 + n2;
    return result;
}

به تعریف بالا دقت کنید، به جای کلمه void از نوع int استفاده کردیم که نشان دهنده نوع بازگشتی متد ما می باشد. اما نکته دیگری نیز وجود دارد که باید به آن توجه کنیم. زمانی که متد ما مقدار بازگشتی دارد، باید جایی داخل بدنه متد، مقداری را با کلمه کلید return بازگردانیم. این مقدار به عنوان خروجی متد در نظر گرفته خواهد شد. در صورتی که متد ما مقدار بازگشتی داشته و جایی از return استفاده نکنیم با پیغام خطا مواجه خواهیم شد. برای فراخوانی متد Sum و استفاده از نتیجه بازگشتی آن به صورت زیر عمل می کنیم:

Console.WriteLine(Sum(2,4));

کد بالا، در خروجی مقدار 6 که حاصل جمع 4 و 2 می باشد را چاپ خواهد کرد.

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

public static decimal CalculateTax(decimal salary, byte tax)
{
    return (salary / 100) * tax;
}

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

Console.WriteLine(CalculateTax(2500000, 5));

تا این جای کار با مقدمات تعریف متدها، پارامترها و مقادیر بازگشتی متدها آشنا شدیم. در بخش دوم از قسمت دهم سری آموزشی سی شارپ با کلمات کلیدی out و ref، مفهوم method overloading و توابع بازگشتی آشنا خواهیم شدیم. ITPRO باشید

نویسنده: حسین احمدی

منبع: انجمن تخصصی فناوری اطلاعات ایران

هر گونه نشر و کپی برداری با ذکر نام نویسنده و منبع بلامانع می باشد

آیا این مطلب را پسندیدید؟
ردیف عنوان قیمت
1 دوره آموزشی .NET Framework و زبان برنامه نویسی سی شارپ - مقدمه رایگان
2 آموزش سی شارپ - قسمت اول :: معرفی و بررسی ابزارهای مورد نیاز دوره رایگان
3 آموزش زبان سی شارپ - قسمت دوم :: آشنایی با .NET Framework و ساختار آن (بخش اول) رایگان
4 آموزش زبان سی شارپ - قسمت دوم :: آشنایی با .NET Framework و ساختار آن (بخش دوم) رایگان
5 آموزش زبان سی شارپ - قسمت سوم :: آشنایی اولیه با محیط Visual Studio و نوشتن اولین برنامه رایگان
6 آموزش زبان سی شارپ - قسمت چهارم :: آشنایی با ساختار برنامه ها و کامپایلر زبان سی شارپ رایگان
7 آموزش زبان سی شارپ - قسمت پنجم :: آشنایی با دستورات کنسول و متغیرها رایگان
8 آموزش زبان سی شارپ - قسمت ششم :: نوع های داده اولیه رایگان
9 آموزش زبان سی شارپ - قسمت هفتم :: آشنایی با عملگرهای زبان سی شارپ رایگان
10 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش اول) رایگان
11 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش دوم) رایگان
12 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش سوم) رایگان
13 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش چهارم) رایگان
14 آموزش زبان سی شارپ - قسمت نهم :: آشنایی با آرایه ها و دستور foreach رایگان
15 آموزش زبان سی شارپ - قسمت دهم :: آشنایی با متدها در زبان سی شارپ (بخش اول) رایگان
16 آموزش زبان سی شارپ - قسمت دهم :: آشنایی با متدها در زبان سی شارپ (بخش دوم) رایگان
17 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت یازدهم :: مقدمه ای بر برنامه نویسی شئ گرا رایگان
18 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت دوازدهم :: آشنایی با کلاس، اشیاء و فضاهای نام رایگان
19 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت سیزدهم :: آشنایی با فیلدها و رفتارها رایگان
20 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت چهاردهم :: آشنایی با Property ها رایگان
21 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت پانزدهم :: آشنایی با سازنده ها و روش های ایجاد اشیاء رایگان
22 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت شانزدهم :: وراثت یا Inheritance رایگان
23 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت هفدهم :: آشنایی با مفهوم Polymorphism رایگان
24 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت هجدهم:: کلاس های abstract و sealed رایگان
25 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت نوزدهم :: سازنده ها در وراثت، کلمه کلیدی protected و فیلدهای readonly رایگان
26 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیستم :: کلاس های static و partial و Extension Method ها رایگان
27 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و یکم :: Reference Types و Value Types رایگان
28 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و دوم :: آشنایی با کاربرد interface ها رایگان
29 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و سوم :: آشنایی با مفاهیم Inversion of Control و Dependency Injection رایگان
30 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و چهارم :: آشنایی با مفهوم Type Casting و انواع Cast ها رایگان
31 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و پنجم :: آشنایی با operator overloading و تعریف cast ها رایگان
32 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و ششم :: مفاهیم boxing و unboxing رایگان
33 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و هفتم :: قابلیت Generics رایگان
34 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و هشتم :: نکات تکمیلی Generic ها، کلاس List و کلاس Dictionary رایگان
35 آموزش زبان سی شارپ -قسمت بیست و نهم (پایانی): استثناء ها (Exceptions) و مدیریت خطاها در سی شارپ رایگان
  • آقا دمت گرم چقدر برای دانشگاهم دنبال این متد ها گشتم بلخره پیداش کردم خیلی ممنونم فقط یه مشکلی هست من مثالی از این متد ها نمیبینم یعنی مثالی ک جنبه امتحانی داشته باشه میخواستم ببینم از کجا میتونم پیدا کنم ؟

  • منظورتون از مثال امتحانی چی هست؟ اگر چیزی مد نظرتون هست در قالب یک سوال ارسال کنید بنده در خدمتتون هستم.

  • این پست حذف شده است
    دلیل حذف: نامشخص

  • سلام و عرض ادب، ممنون از شما. دوره آموزشی فرم ها به صورت ویدیویی داخل سایت هست و آموزش متنی راجع به Windows Forms نداریم.

برای ارسال نظر ابتدا به سایت وارد شوید

arrow