Fonksiyonlar ve metotlar, C# programlarında kod tekrarını önlemek, modülerlik sağlamak ve daha okunaklı bir yapı oluşturmak için kullanılır. Metotlar (Methods), belirli bir işlemi gerçekleştiren kod bloklarıdır ve genellikle bir değer döndüren (return) veya doğrudan işlem yapan (void) türlerde olabilirler.
1. Metot Tanımlama
Bir metot tanımlarken şu temel yapıyı kullanırız:
erişim_belirteci dönüş_tipi metot_adı(parametreler)
{
// Metot içeriği
return değer; // Eğer dönüş_tipi void değilse
}C#| Terim | Açıklama |
|---|---|
| Erişim Belirteci | public, private, protected, internal vb. |
| Dönüş Tipi | void, int, string, bool gibi veri tipleri veya object, List<T> gibi yapılar |
| Metot Adı | Metodun çağrılmasını sağlayan isim |
| Parametreler | Metoda dışarıdan gönderilecek değerler |
2. Void Metotlar (Değer Döndürmeyen Metotlar)
void türündeki metotlar bir işlem yapar ama değer döndürmez.
void SelamVer()
{
Console.WriteLine("Merhaba, hoş geldiniz!");
}C#Çağırma:
SelamVer();C#3. Değer Döndüren Metotlar
Eğer bir metot işlem sonucunda bir değer döndürecekse, return anahtar kelimesi kullanılır.
int Topla(int a, int b)
{
return a + b;
}C#Çağırma ve Kullanma:
int sonuc = Topla(5, 7);
Console.WriteLine("Sonuç: " + sonuc); // 12C#4. Parametreli Metotlar
Metotlara parametre göndererek dinamik hale getirebiliriz.
void Karsilama(string isim)
{
Console.WriteLine("Hoş geldin, " + isim + "!");
}C#Çağırma:
Karsilama("Ahmet");
Karsilama("Zeynep");C#Hoş geldin, Ahmet!
Hoş geldin, Zeynep!C#5. Varsayılan Parametreli Metotlar
Bazı parametrelere varsayılan değer atanabilir.
void MesajGoster(string mesaj = "Merhaba, Dünya!")
{
Console.WriteLine(mesaj);
}C#Çağırma:
MesajGoster(); // "Merhaba, Dünya!"
MesajGoster("Özel bir mesaj"); // "Özel bir mesaj"C#6. Geri Dönüş Tipi bool Olan Metotlar
Bazen bir metot, koşullu bir sonucu döndürmelidir.
bool CiftMi(int sayi)
{
return sayi % 2 == 0;
}C#Console.WriteLine(CiftMi(8)); // true
Console.WriteLine(CiftMi(7)); // falseC#7. Overloading (Aşırı Yükleme)
Aynı isimde fakat farklı parametrelerle tanımlanmış metotlar aşırı yükleme (overloading) olarak adlandırılır.
int Topla(int a, int b)
{
return a + b;
}
double Topla(double a, double b)
{
return a + b;
}
int Topla(int a, int b, int c)
{
return a + b + c;
}C#Çağırma:
Console.WriteLine(Topla(5, 3)); // 8
Console.WriteLine(Topla(2.5, 4.7)); // 7.2
Console.WriteLine(Topla(1, 2, 3)); // 6C#8. Recursive (Özyinelemeli) Metotlar
Bir metot, kendini tekrar tekrar çağırarak işlem yapabilir. Örneğin, faktöriyel hesaplama:
int Faktoriyel(int n)
{
if (n <= 1)
return 1;
return n * Faktoriyel(n - 1);
}C#Çağırma:
Console.WriteLine(Faktoriyel(5)); // 120C#9. Ref ve Out Parametreleri
C#’ta ref ve out anahtar kelimeleri metotlara referans (adres) üzerinden veri aktarmak için kullanılır.
9.1. ref Kullanımı
Eğer bir değişkenin değerini metot içinde değiştirip çağıran yere geri göndermek istiyorsak ref kullanabiliriz.
void DegerArttir(ref int sayi)
{
sayi += 10;
}C#Çağırma:
int num = 5;
DegerArttir(ref num);
Console.WriteLine(num); // 15C#Not: ref kullanırken değişken önceden atanmış olmalıdır.
9.2. out Kullanımı
out parametreleri de ref gibi çalışır, ancak değişkenin önceden atanmasına gerek yoktur.
void Hesapla(int a, int b, out int toplam, out int fark)
{
toplam = a + b;
fark = a - b;
}C#Çağırma:
int t, f;
Hesapla(10, 4, out t, out f);
Console.WriteLine("Toplam: " + t + ", Fark: " + f);C#Toplam: 14, Fark: 6C#10. Lambda İfadeleri ve Expression-bodied Metotlar
C#’ta kısa metotlar için lambda ifadeleri (=>) ve tek satırlık fonksiyonlar kullanılabilir.
10.1. Expression-bodied Metot
int Kare(int x) => x * x;
Console.WriteLine(Kare(5)); // 25C#10.2. Lambda Fonksiyonu
Func<int, int, int> Carp = (x, y) => x * y;
Console.WriteLine(Carp(4, 5)); // 20C#