Repository navigation
CSharp Generics
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Generic тип або метод отримує параметри типів, наприклад T. Компілятор перевіряє звернення до цих типів. Обмеження where описують необхідні властивості: базовий тип, інтерфейс, ?class?, ?struct?, ?notnull?, ?unmanaged? або доступний конструктор ?new()?.
Збережіть цей приклад окремо як Example.cs. Запускайте його незалежно від інших прикладів на сторінці.
Example.cs:
// PROJECT-EXAMPLE
T Echo<T>(T value) => value;
System.Console.WriteLine(Echo(7));
System.Console.WriteLine(Echo("ore"));Результат:
7
ore
T FirstOrFallback<T>(IReadOnlyList<T> values, T fallback)
{
return values.Count > 0 ? values[0] : fallback;
}
int first = FirstOrFallback(new[] { 10, 20 }, 0);
UO.Print(first.ToString());sealed class Store<T> where T : notnull
{
private readonly HashSet<T> values = new();
public bool Add(T value) => values.Add(value);
public int Count => values.Count;
}
var store = new Store<string>();
store.Add("self");
UO.Print(store.Count.ToString());in та out у generic-інтерфейсів та делегатів виражають контраваріантність та коваріантність; це інше застосування слів, ніж параметри методу in/out. Вони задають допустимі перетворення сумісних типів посилань.
Офіційна документація: Узагальнення та обмеження типів – Microsoft Learn.
ClassicUO — Bad Newbie & C# Scripts IDE