C#
Generic metotlar
Generic metot tanımlamayı ve tür argümanıyla çağırmayı öğrenirsin.
Generic metot
Sadece sınıflar değil, metotlar da generic olabilir. Bir generic metot, kendi tür parametresini metot imzasında taşır. void Swap<T>(ref T a, ref T b) yazısı, Swap metodunun herhangi bir türle çağrılabileceğini söyler.
Çağrıda türü açıkça verebilirsin: Swap<int>(ref x, ref y). Veya derleyicinin argümanlardan çıkarmasına izin verirsin: Swap(ref x, ref y). Buna tür çıkarımı (type inference) denir. Generic metotlar, her tür için ayrı yazım yapmadan kod tekrarını önler.
ref ile başvuru geçir
Swap örneğinde ref anahtar kelimesi parametrenin başvuru ile geçmesini sağlar. Yani metodun içindeki değişiklik çağıran tarafta görülür. Değere göre geçişte (default) değişiklik kaybolurdu.
Generic metot, ref T yazımını da destekler. Çağrıda da ref yazmak zorunludur: Swap(ref x, ref y). Bu, hem tanım hem çağrı tarafında açıkça başvuru geçişi istendiğini belirtir. Yanlışlıkla değer geçişi yapmanız engellenir.
Uygulama Swap<T> metodunu yaz
Program sınıfına static void Swap<T>(ref T a, ref T b) metodunu ekle. Gövdede T temp = a; a = b; b = temp; ile yer değiştir. Main içinde int x = 1, y = 2; tanımla; Swap<int>(ref x, ref y) çağır; x ve y'yi Console.WriteLine ile yaz.
Örnek çözümü göster
static void Swap<T>(ref T a, ref T b) { T temp = a; a = b; b = temp; } yaz. Main'de int x = 1, y = 2; Swap<int>(ref x, ref y); Console.WriteLine(x); Console.WriteLine(y); ekle.
Örnek çözüm:
using System;
class Program
{
static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
static void Main()
{
int x = 1, y = 2;
Swap<int>(ref x, ref y);
Console.WriteLine(x);
Console.WriteLine(y);
}
}
Kendini test et
-
Generic metot parametresi
static void Swap<____>(ref T a, ref T b) { }
Cevabı göster
static void Swap<T>(ref T a, ref T b) { }
-
Swap<int>(ref x, ref y) çağrısından sonra ne olur?
int x = 1, y = 2;
Swap<int>(ref x, ref y);
- x=1, y=2 (değişmez)
- x=2, y=1 (yer değiştirir)
- Derleme hatası
- Çalışma zamanı hatası
Cevabı göster
x=2, y=1 (yer değiştirir) — Doğru. ref ile geçirilen değerler metod içinde değişir.
-
Generic metot parçasını eşle
- <T>
- Metot tür parametresi
- ref
- Başvuru ile geçiş
- Swap<int>(...)
- Açık tür çağrısı
- Swap(...)
- Tür çıkarımlı çağrı
Sıradaki ders: Tür kısıtları