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

Ограничение базового типа

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

Синтаксис

class Store<T> where T : BaseType { } void Print<T>(T item) where T : IText { }

Пример

Давайте вызовем метод базового класса через T:

using System; class BaseCode { public virtual string GetCode() { return "12345"; } } class DerivedCode : BaseCode { public override string GetCode() { return "abcde"; } } class Reader<T> where T : BaseCode { public string Read(T item) { return item.GetCode(); } } class Program { static void Main() { var reader = new Reader<DerivedCode>(); Console.WriteLine(reader.Read(new DerivedCode())); } }

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

"abcde"

Пример

Давайте ограничим T интерфейсом и прочитаем текст:

using System; interface IText { string GetText(); } class Line : IText { public string GetText() { return "abcde"; } } class Echo<T> where T : IText { public string Run(T item) { return item.GetText(); } } class Program { static void Main() { var echo = new Echo<Line>(); Console.WriteLine(echo.Run(new Line())); } }

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

"abcde"

Пример

Давайте передадим в метод разные классы с общей базой:

using System; class Root { public int Size = 5; } class Branch : Root { } class SizeOf<T> where T : Root { public int Read(T item) { return item.Size; } } class Program { static void Main() { var tool = new SizeOf<Branch>(); Console.WriteLine(tool.Read(new Branch())); } }

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

5

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

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить