Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1111 of 1492 menu
◀ ▶

Ограничение class

В объявлении обобщённого типа или метода после where T : class аргументом T может быть класс, интерфейс, делегат или массив - но не тип-значение. В nullable-контексте T считают non-nullable ссылочным типом, а для проверки на отсутствие ссылки используют null и паттерн is null.

Синтаксис

class Имя<T> where T : class { } void Метод<T>(T arg) where T : class { }

Пример

Давайте сохраним строку в обобщённом классе с ограничением class:

using System; class RefBox<T> where T : class { public T Value; } class Program { static void Main() { var box = new RefBox<string> { Value = "abcde" }; Console.WriteLine(box.Value); } }

Результат выполнения кода:

"abcde"

Пример

Давайте проверим ссылку на null через is null:

using System; class NullProbe<T> where T : class { public static string Describe(T? value) { return value is null ? "empty" : "set"; } } class Program { static void Main() { Console.WriteLine(NullProbe<string>.Describe(null)); Console.WriteLine(NullProbe<string>.Describe("12345")); } }

Результат выполнения кода:

"empty" "set"

Пример

Давайте передадим массив - он тоже ссылочный тип:

using System; class FirstCell<T> where T : class { public static string Read(T[] items) { return items[0]; } } class Program { static void Main() { string[] rows = { "abcde", "12345" }; Console.WriteLine(FirstCell<string>.Read(rows)); } }

Результат выполнения кода:

"abcde"

Смотрите также

  • ограничение struct,
    которое допускает только тип-значение
  • ограничение notnull,
    которое запрещает null для аргумента типа
  • ключевое слово class,
    которое объявляет ссылочный тип
  • тип string,
    который часто подставляют вместо T с class
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить