Genel sınıflar ve yöntemler
Generics, .NET'e tür parametreleri kavramını tanıtır. Genel değerler, siz kodunuzda sınıf veya yöntemi kullanana kadar bir veya daha fazla tür parametresinin belirtimini erteleyebilen sınıflar ve yöntemler tasarlamayı mümkün hale getirir. Örneğin, genel tür parametresini T
kullanarak, burada gösterildiği gibi çalışma zamanı atamalarının veya kutulama işlemlerinin maliyetine veya riskine neden olmadan diğer istemci kodunun kullanabileceği tek bir sınıf yazabilirsiniz:
// Declare the generic class.
public class GenericList<T>
{
public void Add(T item) { }
}
public class ExampleClass { }
class TestGenericList
{
static void Main()
{
// Create a list of type int.
GenericList<int> list1 = new();
list1.Add(1);
// Create a list of type string.
GenericList<string> list2 = new();
list2.Add("");
// Create a list of type ExampleClass.
GenericList<ExampleClass> list3 = new();
list3.Add(new ExampleClass());
}
}
Genel sınıflar ve yöntemler, yeniden kullanılabilirlik, tür güvenliği ve verimliliği, kendi üretilmeyen karşılıklarının kullanamaması gibi bir şekilde birleştirir. Genel tür parametreleri, derleme sırasında tür bağımsız değişkenleriyle değiştirilir. Yukarıdaki örnekte, derleyici ile değiştirilir T
int
. Genel öğeler en sık koleksiyonlar ve bunlar üzerinde çalışan yöntemlerle kullanılır. Ad System.Collections.Generic alanı birkaç genel tabanlı koleksiyon sınıfı içerir. Gibi ArrayList genel olmayan koleksiyonlar önerilmez ve yalnızca uyumluluk amacıyla korunur. Daha fazla bilgi için bkz . .NET'te genel değerler.
Ayrıca, tür açısından güvenli ve verimli olan kendi genelleştirilmiş çözümlerinizi ve tasarım desenlerinizi sağlamak için özel genel türler ve yöntemler oluşturabilirsiniz. Aşağıdaki kod örneği, gösterim amacıyla basit bir genel bağlantılı liste sınıfını gösterir. (Çoğu durumda, kendi sınıfınızı oluşturmak yerine .NET tarafından sağlanan sınıfı kullanmalısınız List<T> .) tür parametresi T
, listede depolanan öğenin türünü belirtmek için normalde somut bir türün kullanıldığı çeşitli konumlarda kullanılır:
- yöntemindeki bir yöntem parametresinin
AddHead
türü olarak. - İç içe
Node
geçmiş sınıfta özelliğinin dönüş türüData
olarak. - İç içe geçmiş sınıftaki özel üyenin
data
türü olarak.
T
iç içe geçmiş Node
sınıfı tarafından kullanılabilir. Örneğin, GenericList<int>
somut bir türle örneklendiğindeGenericList<T>
, her oluşumu T
ile int
değiştirilir.
// Type parameter T in angle brackets.
public class GenericList<T>
{
// The nested class is also generic, and
// holds a data item of type T.
private class Node(T t)
{
// T as property type.
public T Data { get; set; } = t;
public Node? Next { get; set; }
}
// First item in the linked list
private Node? head;
// T as parameter type.
public void AddHead(T t)
{
Node n = new(t);
n.Next = head;
head = n;
}
// T in method return type.
public IEnumerator<T> GetEnumerator()
{
Node? current = head;
while (current is not null)
{
yield return current.Data;
current = current.Next;
}
}
}
Aşağıdaki kod örneği, istemci kodunun tamsayı listesi oluşturmak için genel GenericList<T>
sınıfı nasıl kullandığını gösterir. Tür bağımsız değişkenini değiştirirseniz, aşağıdaki kod dizelerin veya başka bir özel türün listesini oluşturur:
// A generic list of int.
GenericList<int> list = new();
// Add ten int values.
for (int x = 0; x < 10; x++)
{
list.AddHead(x);
}
// Write them to the console.
foreach (int i in list)
{
Console.WriteLine(i);
}
Console.WriteLine("Done");
Not
Genel türler sınıflar ile sınırlı değildir. Yukarıdaki örneklerde türler kullanılırclass
, ancak türler de dahil olmak üzere record
genel interface
ve struct
türler tanımlayabilirsiniz.
Genel değerlere genel bakış
- Kod yeniden kullanımını, tür güvenliğini ve performansı en üst düzeye çıkarmak için genel türleri kullanın.
- Genel türlerin en yaygın kullanımı koleksiyon sınıfları oluşturmaktır.
- .NET sınıf kitaplığı, ad alanında System.Collections.Generic birkaç genel koleksiyon sınıfı içerir. Genel koleksiyonlar, ad alanı gibi ArrayList System.Collections sınıflar yerine mümkün olduğunda kullanılmalıdır.
- Kendi genel arabirimlerinizi, sınıflarınızı, yöntemlerinizi, olaylarınızı ve temsilcilerinizi oluşturabilirsiniz.
- Belirli veri türlerindeki yöntemlere erişimi etkinleştirmek için genel sınıflar kısıtlanabilir.
- Yansıma kullanarak genel bir veri türünde kullanılan türler hakkında çalışma zamanında bilgi edinebilirsiniz.
C# dili belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi.