Genel yöntemler (C# programlama kılavuzu)
Genel yöntem, aşağıdaki gibi tür parametreleriyle bildirilen bir yöntemdir:
static void Swap<T>(ref T lhs, ref T rhs)
{
T temp;
temp = lhs;
lhs = rhs;
rhs = temp;
}
Aşağıdaki kod örneği, tür bağımsız değişkeni için kullanarak int
yöntemini çağırmanın bir yolunu gösterir:
public static void TestSwap()
{
int a = 1;
int b = 2;
Swap<int>(ref a, ref b);
System.Console.WriteLine(a + " " + b);
}
Ayrıca tür bağımsız değişkenini atlayabilirsiniz ve derleyici bunu çıkaracaktır. Için aşağıdaki çağrı Swap
, önceki çağrıya eşdeğerdir:
Swap(ref a, ref b);
Tür çıkarımı için aynı kurallar statik yöntemler ve örnek yöntemleri için de geçerlidir. Derleyici, geçirdiğiniz yöntem bağımsız değişkenlerine göre tür parametrelerini çıkarsayabilir; yalnızca bir kısıtlama veya dönüş değerinden tür parametrelerini çıkaramaz. Bu nedenle tür çıkarımı parametresi olmayan yöntemlerle çalışmaz. Tür çıkarımı, derleyici aşırı yüklenmiş yöntem imzalarını çözümlemeye çalışmadan önce derleme zamanında gerçekleşir. Derleyici, aynı adı paylaşan tüm genel yöntemlere tür çıkarım mantığı uygular. Aşırı yükleme çözümleme adımında, derleyici yalnızca tür çıkarımının başarılı olduğu genel yöntemleri içerir.
Genel bir sınıf içinde, genel olmayan yöntemler aşağıdaki gibi sınıf düzeyi tür parametrelerine erişebilir:
class SampleClass<T>
{
void Swap(ref T lhs, ref T rhs) { }
}
İçeren sınıfla aynı tür parametreleri alan genel bir yöntem tanımlarsanız, derleyici uyarı CS0693 oluşturur çünkü yöntem kapsamında, iç T
için sağlanan bağımsız değişken dış T
için sağlanan bağımsız değişkeni gizler. Sınıf örneği oluşturulurken sağlananlar dışında tür bağımsız değişkenleriyle genel bir sınıf yöntemini çağırma esnekliğine ihtiyacınız varsa, aşağıdaki örnekte gösterildiği GenericList2<T>
gibi yöntemin tür parametresi için başka bir tanımlayıcı sağlamayı göz önünde bulundurun.
class GenericList<T>
{
// CS0693.
void SampleMethod<T>() { }
}
class GenericList2<T>
{
// No warning.
void SampleMethod<U>() { }
}
Yöntemlerdeki tür parametrelerinde daha özel işlemler etkinleştirmek için kısıtlamaları kullanın. adlı bu Swap<T>
SwapIfGreater<T>
sürümü yalnızca uygulayan IComparable<T>tür bağımsız değişkenleriyle kullanılabilir.
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>
{
T temp;
if (lhs.CompareTo(rhs) > 0)
{
temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Genel yöntemler çeşitli tür parametrelerinde aşırı yüklenebilir. Örneğin, aşağıdaki yöntemlerin tümü aynı sınıfta bulunabilir:
void DoWork() { }
void DoWork<T>() { }
void DoWork<T, U>() { }
Bir yöntemin dönüş türü olarak type parametresini de kullanabilirsiniz. Aşağıdaki kod örneği, türünde T
bir dizi döndüren bir yöntemi gösterir:
T[] Swap<T>(T a, T b)
{
return [b, a];
}
C# Dil Belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi.