0Pricing
C# Academy · Урок

Обобщённые методы и типы; ограничения

Пишите обобщённые методы и типы; добавляйте ограничения с помощью where T : … (class, struct, new(), интерфейс/базовый тип).

«Обобщённые методы и типы; ограничения» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 3 уроков всего.

Обзор обобщений

Цель: безопасно переиспользовать код с помощью обобщений.

  • Обобщённые методы и типы
  • Ограничения: класс, структура, конструктор без параметров, интерфейс или базовый тип
  • Делайте примеры небольшими и понятными

Обобщённый метод

Обобщённый метод имеет список параметров типа и работает со множеством типов.

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);
  }
}

Обобщённый тип

Обобщённый тип (например, Box<T>) компилируется один раз и используется с множеством конкретных типов.

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

Ограничение создания экземпляра

Добавьте ограничение, разрешающее создавать экземпляр типа внутри обобщённого кода.

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);
  }
}

Ограничение интерфейсом

Ограничьте 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
  }
}

Ограничения класса и структуры и советы

Другие ограничения:

  • Ограничение ссылочного типа → только ссылочные типы
  • Ограничение типа-значения → типы-значения, допускающие значение по умолчанию, но не null
  • Ограничения можно объединять: ссылочный тип, IDisposable и конструктор без параметров
  • Делайте внешние интерфейсы минимальными; для гибкости предпочитайте ограничения интерфейсами.

Значение ограничения создания экземпляра

Быстрая проверка: какое ограничение позволяет создать новый экземпляр T внутри обобщённого кода?

Повторение

Повторение: создавайте обобщённые методы и типы и добавляйте ограничения, чтобы использовать необходимые члены: интерфейс или базовый тип — для поведения, класс или структура — для вида типа, а конструктор без параметров — для создания экземпляра.

Часто задаваемые вопросы

Урок «Обобщённые методы и типы; ограничения» бесплатный?

Да — полный текст урока «Обобщённые методы и типы; ограничения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 3 уроков всего.

Чему я научусь в уроке «Обобщённые методы и типы; ограничения»?

Пишите обобщённые методы и типы; добавляйте ограничения с помощью where T : … (class, struct, new(), интерфейс/базовый тип). Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.

Сколько времени занимает урок «Обобщённые методы и типы; ограничения»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Обобщённые методы и типы; ограничения
  2. Вариативность (in/out) с интерфейсами и делегатами
  3. Ссылочные типы, допускающие null (обзор), и аннотации (шаблоны C# 6)
← Назад к C# Academy