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


class class_name

    {

        ...

        ...

        <Access_Specifier> <Return_Type> Method_Name(<Parameters>)

        {

            // دستورات اجرایی

        }

        ...

        ...

    }


کد بالا را مشاهده کردید، یک روش در کلاس با پارامترهای مختلف تعریف کردم
  Access_Specifier - برای تعریف یک سطح دسترسی یا عمومی یا خصوصی و غیره استفاده می شود تا دیگر کلاسها بتوانند به روش دسترسی داشته باشند. اگر ما هیچ یک از اصلاح کننده های دسترسی را درج نکنیم، به طور پیش فرض آن خصوصی شناخته میشود.
Return_Type - برای مشخص کردن نوع مقدار روش بازگشتی می تواند استفاده شود. در صورتی که اگر روش هیچ مقدار بازگشتی نداشته باشد، باید نام void را به عنوان نوع return نامگذاری کنیم.
نام Method_Name - باید یک نام منحصر به فرد برای شناسایی روش در یک کلاس باشد.
Parameters - پارامترهای روش برای ارسال یا دریافت داده ها از روش استفاده می شوند و پارامترهای این روش در داخل پرانتز قرار می گیرند و با کاما جدا می شوند. در صورتی که اگر برای یک روش برای پارامترها نیاز نباشد، باید یک روش را با پرانتزهای خالی تعریف کنیم
درسی شارپ هر دو روش و توابع یکسان هستند، هیچ تفاوتی وجود ندارد و این فقط یک اصطلاح مختلف برای انجام همان کار در c # است
در زیر نمونه هایی از تعریف روش های مختلف رو مینویسم

class Users

    {

        public void GetUsers() {

        // دستورات اجرایی

        }

        private void InsertUserDetails(string name, int age) {

        // دستورات اجرایی
} protected string GetUserDetails(int userid) { // دستورات اجرایی
} }

اگر از مثال بالامتوجه شدید، روش های مختلفی با اصلاح کننده های مختلف دسترسی، نوع بازگشت و با پارامتر های مختلف را بر  اساس الزامات  تعریف کردم
حالا  نمونه کامل را درج میکنم

using System;

 

namespace Tutlane

{

    class Program

    {

        static void Main(string[] args)

        {

            Program p = new Program();

            string result = p.GetUserDetails("Suresh Dasari", 31);

            Console.WriteLine(result);

            Console.WriteLine("Press Enter Key to Exit..");

            Console.ReadLine();

        }

        public string GetUserDetails(string name, int age)

        {

            string info = string.Format("Name: {0}, Age: {1}", name, age);

            return info;

        }

    }

}


خروجی==>
اگر از مثال بالا متوجه شدید، ما یک روش به نام GetUserDetails ایجاد کردیم و یک پارامتر را برای انجام عملیات مورد نیاز ایجاد کردیم و ما به روش GetUserDetails دسترسی پیدا می کنیم و با ایجاد مثال از کلاس Program در روش Main برای نمایش نتیجه می رویم.
 هنگامی که ما برنامه C # بالا را اجرا میکنیم، نتیجه را همانطور که در تصویر زیر نشان داده شده است دریافت خواهید کرد

Name: Ali Ahmadi, Age: 31
Press Enter Key to Exit..

در c #، اگر ما روش هایی با استاتیک ایجاد کنیم، می توانیم این روش ها را از سطح کلاس مستقیما بدون ایجاد یک شیء فراخوانی کنیم.

اگر در مثال بالا مشاهده می کنید، روش اصلی استاتیک است و ما بوسیله ایجاد یک نمونه از کلاس برنامه با روش GetUserDetails فراخوانی می کنیم. در عوض، اگر ما یک روش با استاتیک ایجاد کنیم، می توانیم به طور مستقیم به این روش ها در متد Main () بدون ایجاد یک نمونه از شیء دسترسی پیدا کنیم.
 در زیر نمونه ای از ایجاد روش هایی با استاتیک برای دسترسی به این روش ها به طور مستقیم در روش Main () بدون ایجاد یک نمونه از شی در c # است.

using System;

 

namespace Tutlane

{

    class Program

    {

        static void Main(string[] args)

        {

            string result = GetUserDetails("Suresh Dasari", 31);

            Console.WriteLine(result);

            Console.WriteLine("Press Enter Key to Exit..");

            Console.ReadLine();

        }

        public static string GetUserDetails(string name, int age)

        {

            string info = string.Format("Name: {0}, Age: {1}", name, age);

            return info;

        }

    }

}

نتیجه=>


Name: Vahid Mohammadi, Age: 31
Press Enter Key to Exit..

همانطور که در مورد شروط ما، ما می توانیم روش هایی را در برنامه های C # با یا بدون نوع و پارامترهای بازگشت ایجاد کنیم. اگر ما از نوع void به عنوان نوع بازگشتی برای روش استفاده کنیم، این روش هیچ ارزش ایفا نمی کند.
در زیر نمونه ای از ایجاد یک روش بدون داشتن مقدار بازگشتی و پارامترها در زبان برنامه نویسی c # است

using System;

 

namespace Tutlane

{

    class Program

    {

        static void Main(string[] args)

        {

            GetUserDetails();

            Console.WriteLine("Press Enter Key to Exit..");

            Console.ReadLine();

        }

        public static void GetUserDetails()

        {

            string name = "Suresh Dasari";

            int age = 31;

            Console.WriteLine("Name: {0}, Age: {1}", name, age);

        }

    }

}

نتیجه==>

Name: Saeed Mohammadi, Age: 31
Press Enter Key to Exit..

فرض کنید اگر ما یک روش با پارامترهای c # ایجاد کنیم، پس ما باید یک پارامتر را به آن روش منتقل کنیم در حالی که آن را در برنامه ما فراخوانی می کنیم.
 در c # ما روش های مختلفی برای انتقال پارامتر به روش وجود دارد
Value Parameters
Reference Parameters
Output Parameters
یه نموه برای Value Parameters


using System;

 

namespace Tutlane

{

    class Program

    {

        static void Main(string[] args)

        {

            int x = 10;

            Console.WriteLine("Variable Value Before Calling the Method: {0}", x);

            Multiplication(x);

            Console.WriteLine("Variable Value After Calling the Method: {0}", x);

            Console.WriteLine("Press Enter Key to Exit..");

            Console.ReadLine();

        }

        public static void Multiplication(int a)

        {

            a *= a;

            Console.WriteLine("Variable Value Inside the Method: {0}", a);

        }

    }

}


خروجی==>

Motaghayer Gab Az Farakhani: 10
Motaghayer Bad  Az Farakhani: 100
Meghdar Motaghayer : 10
Press Enter Key to Exit..

اگر مثال فوق را مشاهده کنید، متغیر x بعنوان متد ورودی یک نوع متغییر  است و به روش ضرب اعمال می شود. محتوا متغیر x، کپی به پارامتر a و تغییرات مورد نیاز در روش ضرب، اما تغییراتی که در داخل روش ساخته شده است، بر مقدار اولیه متغیر اثر نمی گذارد.