Metody i typy generyczne; ograniczenia
Pisz generyczne metody i typy; dodawaj ograniczenia za pomocą where T : … (class, struct, new(), interfejs/klasa bazowa).
Metody i typy generyczne; ograniczenia to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.
Przegląd generyków
Cel: Bezpiecznie ponownie wykorzystywać kod za pomocą generyków.
- Metody i typy generyczne
- Ograniczenia: class, struct, new(), interfejs lub klasa bazowa
- Twórz małe i przejrzyste przykłady
Metoda generyczna
Metoda generyczna ma listę parametrów typu, np. Identity<T>, i działa z wieloma typami.
using System;
// Generic method works for any T
public class Program
{
static T Identity<T>(T value)
{
// just returns what it got
return value;
}
public static void Main(string[] args)
{
int a = Identity<int>(5);
string b = Identity<string>("hi");
Console.WriteLine(a + " & " + b);
}
}
Typ generyczny
Typ generyczny, taki jak Box<T>, jest kompilowany raz i używany z wieloma typami konkretnymi.
using System;
// Simple generic type to hold a value
public sealed class Box<T>
{
private T _value;
public Box(T value) { _value = value; }
public T Get() { return _value; }
public void Set(T value) { _value = value; }
}
public class Program
{
public static void Main(string[] args)
{
Box<int> bi = new Box<int>(10);
Box<string> bs = new Box<string>("ok");
Console.WriteLine(bi.Get() + " | " + bs.Get());
}
}
Ograniczenie new()
Dodaj where T : new(), jeśli potrzebujesz wywołać new T() wewnątrz kodu generycznego.
using System;
// Factory that can create T with a parameterless ctor
public static class Factory
{
public static T Create<T>() where T : new()
{
return new T(); // allowed thanks to new() constraint
}
}
public sealed class Person
{
public string Name;
public Person() { Name = "Anon"; }
}
public class Program
{
public static void Main(string[] args)
{
Person p = Factory.Create<Person>();
Console.WriteLine(p.Name);
}
}
Ograniczenie interfejsu
Ogranicz T do interfejsu lub typu bazowego, aby móc wywoływać jego elementy, np. IComparable<T>.
using System;
// Min for two values that can be compared
public static class Utils
{
public static T Min<T>(T a, T b) where T : IComparable<T>
{
return a.CompareTo(b) <= 0 ? a : b;
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(Utils.Min(5, 3)); // 3
Console.WriteLine(Utils.Min("b", "a")); // a
}
}
Ograniczenia class/struct i wskazówki
Inne ograniczenia:
- where T : class → tylko typy referencyjne
- where T : struct → nieoznaczające wartości null typy wartości
- Łącz ograniczenia: where T : class, IDisposable, new()
- Ograniczaj API do minimum; dla większej elastyczności preferuj ograniczenia interfejsowe.
Znaczenie ograniczenia new()
Podsumowanie
Podsumowanie: Twórz metody i typy generyczne oraz dodawaj ograniczenia, aby korzystać z wymaganych elementów: interfejsu lub typu bazowego w celu zapewnienia zachowania, class/struct w celu określenia rodzaju typu oraz new() do wywoływania konstruktora bez parametrów.
Często zadawane pytania
Czy lekcja „Metody i typy generyczne; ograniczenia” jest bezpłatna?
Tak — pełny tekst „Metody i typy generyczne; ograniczenia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Metody i typy generyczne; ograniczenia”?
Pisz generyczne metody i typy; dodawaj ograniczenia za pomocą where T : … (class, struct, new(), interfejs/klasa bazowa). Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.
Ile czasu zajmuje lekcja „Metody i typy generyczne; ograniczenia”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Metody i typy generyczne; ograniczenia
- Wariancja (in/out) z interfejsami i delegatami
- Typy referencyjne dopuszczające null (świadomość) i adnotacje (wzorce z C# 6)