
Belli bir işlemi gerçekleştiren ve geliştiriciyi kod tekrarından kurtaran yapılardır. Fonksiyon olarak da adlandırılırlar.
NOT: Geriye değer döndüren ya da döndürmeyen metotlar olarak 2’ ye ayrılırlar.
Erişim belirleyiciler vardır ki bunlar; metotlarımıza kimlerin erişim sağlayabileceğinin kontrolünün yapıldığı program komutlarıdır.
Public: Herkese açık.
Private: Sadece içerisinde bulunduğu sınıftan erişim sağlanır.
İnternal: Aynı modül içerisinden erişim sağlanır. Yani kullandığımız kod bloğu içinde erişim sağlanır.
Protected: Tanımlandığı sınıf ve miras alınan sınıflardan erişim sağlanır.
* Metotlar ile birlikte kullanacağımız bir diğer kavram da static. yani bulunduğu sınıftan nesne oluşturulmadan kullanılan yapılardır.
İlerleyen derslerde göreceğimiz Nesne Yönelimli Programlama(OOP-Object Orianted Programming) şemasını aşağıda görebiliriz.

Metotların tanımlanması aşağıdaki gibi olmalıdır.
Erişim_belirleyici_türü static metot_türü metod_adı() Örneğin;
Public static void GetCustomer() {İşlemler};
GERİYE DEĞER DÖNDÜRMEYEN METOTLAR
- Metotların başına erişim belirleyici türünü yazmazsak varsayılan olarak private tanımlanacaktır.
- Metot geriye değer döndürmeyecekse void olarak tanımlamak gerekir.
- Metot içerisinde nesne kullanmayacaksak static olarak tanımlamak gerekir.
public static void Toplam()
{
int sayi1 = 0;
int sayi2 = 0;
int sonucToplam = 0;
Console.WriteLine("1.Sayıyı Giriniz");
sayi1 = int.Parse(Console.ReadLine());
YaziBosluk();
Console.WriteLine("2.Sayıyı Giriniz");
sayi2 = int.Parse(Console.ReadLine());
YaziBosluk();
sonucToplam = sayi1 + sayi2;
Console.WriteLine("Girilen Sayıların Toplamı :" + " " + sonucToplam);
Console.Read();
}
public static void YaziBosluk()
{
Console.WriteLine("----------------");
Console.WriteLine("****************");
Console.WriteLine("----------------");
}
public static void ArdisikSayilar()
{
for (int i = 0; i < 10; i++)
{
Console.Write(i);
}
Console.Read();
}
static void Main(string[] args)
{
//Yukarıda ki Metot Geriye Değer Döndürmeyen Metot Türlerine Bir Örnekti.
//Yani sadece içerisinde şu işlemi yap dedik ve bitirdik.
//Eğer biz bir işlem yap ve onun sonucu bize getir deseydik farklı işlemler yapacaktık
//Hadi O işlemleri yapalım.
//ArdisikSayilar();
Toplam();
}
Şimdiye kadar kodlarımızı direk olarak hep Main class’ ının içerisinde yazdık. Bu safhadan sonrasında bir üst perdeye çıkacağız ve metotlarımızı tanımlayacağız.
Geriye değer döndürmeyen metotları detaylı olarak açıklamamız gerekirse; Bu metotlar tak-çalıştır gibi mantığındadır. Yani burada belirttiğimiz işlemleri yap bitir çık gibi düşünebiliriz. İçerisine bir değer göndererek karmaşık işler yaptıracağımız türden değiller. Fakat parametre göndererek de işlem yaptırabiliriz.
Yukarıda ki kod örneğinde de 2 sayıyı isteyip toplatan bir metot yazdırıp main tarafında çağırmasını yapmışız. Böylece bu metodu programımızın istenilen her yerinden çağırmasını yapabiliriz.
Basit bir kullanımını da aşağıda ki kod parçacığından görebiliriz.
public static void MetinYaz(string p)
{
Console.WriteLine("------------");
Console.WriteLine(p);
Console.WriteLine("------------");
Console.Read();
}
static void Main(string[] args)
{
//Geriye Değer Döndürmeyen Metotlarda Parametre Kullanımı
Console.WriteLine("Bir Metin Giriniz:");
string metin = Console.ReadLine();
MetinYaz("Girilen Metin :" + " " + metin);
}
GERİYE DEĞER DÖNDÜREN METOTLAR
- Geriye dönüş tipi alarak oluşturulan metotlardır. Ve yazılımda en çok kullanılan yöntemlerdir bence.
- Geriye değer döndürmeyen metotlarda void tanımlaması yapılır.
- Geriye değer döndüren metotlarda ise int, string veya sınıfa ait ilgili değerin türü yazılır.
- Geriye dönecek değer return ifadesi ile belirlenir.
- Dışarıdan parametre alacaksa metot parantez içerisine yazılır.
Geriye değer dönen metotlar aşağıdaki şekilde ki şemaya göre yazılır. Hiç değişmez.

Yukarıda ki şablona uygun olarak ise; aşağıdaki gibi bir örnek yapalım.
//Yadığımız Toplama Metodu 2 int türünden parametre alıyor ve geriye döndürüyor
//Geriye Değer Döndüren Parametreli Metota Örnek.
public static int Toplam(int sayi1, int sayi2)
{
return sayi1 + sayi2;
}
static void Main(string[] args)
{
Console.WriteLine("Lütfen 1.Sayıyı Sayı Giriniz :");
int s1 = int.Parse(Console.ReadLine());
Console.WriteLine("Lütfen 2.Sayıyı Sayı Giriniz :");
int s2 = int.Parse(Console.ReadLine());
Console.WriteLine("Girilen Sayıların Toplamı :" + " " + Toplam(s1, s2));
Console.Read();
}
Kod da tanımladığımız Toplam isimli metodu inceleyelim. İnt Toplam yazan yer; ben int değer döndüren Toplam isimli bir metodum diyor. Parantez içerisinde 2 adet int türünde değişken istemiş bu metot. İçerisinde ise return ile alınan değerleri toplayarak döndür diyor. Yani metot içerisine iki değer alıyor dışarıya da iki değer döndürüyor. Böylece klavyeden girilen 2 değeri toplayıp geriye döndürüyor.
METOTLARI AŞIRI YÜKLEME(OVERLOAD)
Görevleri farklı olmak şartıyla aynı isimli birden fazla metot bulunmasıdır.
SelamVer() isminde bir metot var fakat 20 milletten insan geldi ama onu belirtmez isek ve sadece
SelamVer() şeklinde bırakırsak metodu aşırı yüklemiş oluruz. Yani programın kafasını karıştırmış oluruz. Böylece hata verir.

Program; şekilde ki gibi benim kafam karıştı aynı isimde iki tane metodum var ve hangisini kullanacağımı bilmiyorum diyor. Bu durumda yazılımcılar olarak biz overload’ına bakar ve hangisini kullanacağımıza karar veririz. Aşırı yükleme dediğimiz olay yazılım dünyasında bu demek.
Yani iki metodun aynı isimde olması önemli değil. Önemli olan aldığı parametreler. Minimum 2 parametre almalı. Ya yukarıda ki ya da aşağıdaki metot çalıştırılacaktır.
Resmin kod karşılığını da ekleyelim.
public static int Toplam(int a, int b)
{
return a + b;
}
public static int Toplam(int a, int b, int c)
{
return a + b + c;
}
static void Main(string[] args)
{
Console.WriteLine(Toplam(1,2));
Console.ReadLine();
}