0Pricing
C# Academy · Lekcja

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()

Szybkie sprawdzenie: Które ograniczenie pozwala utworzyć new T() wewnątrz kodu generycznego?

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

  1. Metody i typy generyczne; ograniczenia
  2. Wariancja (in/out) z interfejsami i delegatami
  3. Typy referencyjne dopuszczające null (świadomość) i adnotacje (wzorce z C# 6)
← Powrót do C# Academy