Обобщения в C#
Узнайте, как обобщения позволяют создавать типобезопасные и повторно используемые структуры кода
«Обобщения в C#» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 5. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 5 уроков всего.
Введение в обобщения
Обобщения в C#
Добро пожаловать на первый урок раздела «Расширенные возможности C#»! На этом уроке вы узнаете об обобщениях — мощной возможности C#, которая позволяет создавать гибкий и повторно используемый код. Начнем!

Что такое обобщения?
Что такое обобщения?
Обобщения — это возможность C#, позволяющая определять классы, методы и структуры данных с заполнителем для типа данных, которые они хранят или используют. Обобщения обеспечивают безопасность типов и повторное использование кода.
Пример: Обобщенный список (List<T>) может хранить элементы любого типа, обеспечивая при этом безопасность типов.
Создание обобщенных классов
Создание обобщенных классов
Обобщенный класс можно определить с помощью синтаксиса <T>, где T обозначает параметр типа. Пример:
Главное: Используйте обобщения, чтобы создавать классы, работающие с любым типом данных и сохраняющие безопасность типов.
using System;
class GenericBox<T> {
public T Value { get; set; }
public void Display() {
Console.WriteLine("Value: " + Value);
}
}
class Program {
static void Main() {
GenericBox<int> intBox = new GenericBox<int> { Value = 42 };
intBox.Display(); // Outputs: Value: 42
GenericBox<string> stringBox = new GenericBox<string> { Value = "Hello, Generics!" };
stringBox.Display(); // Outputs: Value: Hello, Generics!
}
}
Создание обобщенных методов
Создание обобщенных методов
Обобщенный метод можно определить внутри класса. Пример:
Совет: Используйте обобщенные методы для операций, применимых к нескольким типам данных.
using System;
class Program {
static void Main() {
PrintValue(42);
PrintValue("Generics are powerful!");
}
static void PrintValue<T>(T value) {
Console.WriteLine("Value: " + value);
}
}
Ограничения обобщений
Ограничения обобщений
Ограничения определяют, какие типы можно использовать в качестве параметров типов. Пример:
where T : struct— T должен быть типом значения.where T : class— T должен быть ссылочным типом.where T : new()— T должен иметь конструктор без параметров.
Пример:
Главное: Ограничения делают обобщения более гибкими и применимыми в конкретных сценариях.
using System;
class Program {
static void Main() {
DisplayDefault<int>();
DisplayDefault<string>();
}
static void DisplayDefault<T>() where T : new() {
T instance = new T();
Console.WriteLine("Created instance of: " + typeof(T));
}
}
Обобщенные коллекции
Обобщенные коллекции
C# предоставляет несколько встроенных обобщенных коллекций:
- List<T>: Хранит коллекцию элементов в динамическом массиве.
- Dictionary<TKey, TValue>: Хранит пары «ключ-значение» для быстрого поиска.
- Queue<T>: Реализует структуру «первым пришел — первым ушел» (FIFO).
Пример: Использование обобщенного списка:
using System;
using System.Collections.Generic;
class Program {
static void Main() {
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
names.Add("Diana");
foreach (string name in names) {
Console.WriteLine(name);
}
}
}
Практическое задание
Практическое задание
Создайте обобщенный класс Pair<TKey, TValue>, который хранит пару «ключ-значение», и обобщенный метод Swap(), меняющий местами ключ и значение. Пример:
using System;
class Pair<TKey, TValue> {
public TKey Key { get; set; }
public TValue Value { get; set; }
public void Swap() {
(Key, Value) = ((TKey)(object)Value, (TValue)(object)Key);
}
public void Display() {
Console.WriteLine($"Key: {Key}, Value: {Value}");
}
}
class Program {
static void Main() {
Pair<string, int> pair = new Pair<string, int> { Key = "Age", Value = 30 };
pair.Display();
pair.Swap();
pair.Display();
}
}
Рекомендации по использованию обобщений
Рекомендации по использованию обобщений
Вот несколько рекомендаций:
- Используйте обобщения для создания повторно используемых классов и методов с безопасностью типов.
- Применяйте ограничения, когда требуются определенные свойства типа.
- Для повышения производительности и безопасности отдавайте предпочтение обобщенным коллекциям, а не необобщенным.
Совет: Используйте понятные имена параметров типов, например T для типа или TKey и TValue для пар «ключ-значение».
Отличная работа!
Отличная работа!
Поздравляю! Вы научились использовать обобщения для создания повторно используемого и гибкого кода на C#. На следующем уроке мы рассмотрим асинхронное программирование с помощью async и await. Продолжайте программировать!

Часто задаваемые вопросы
Урок «Обобщения в C#» бесплатный?
Да — полный текст урока «Обобщения в C#» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 5 уроков всего.
Чему я научусь в уроке «Обобщения в C#»?
Узнайте, как обобщения позволяют создавать типобезопасные и повторно используемые структуры кода Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 5.
Сколько времени занимает урок «Обобщения в C#»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обобщения в C#
- Async и Await: работа с асинхронным кодом
- Потоки и задачи
- Делегаты и лямбда-выражения
- Рефлексия в C#