English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В предыдущей статье я介绍了 краткий анализ системы типов в C# (типы значений и типы ссылок),接下来通过本文给大家介绍c# гетерогенные типы.
Объясним гетерогенные типы в C#,熟练地 использование гетерогенных типов может повысить повторное использование кода, использование нашего кода внезапно становится высоким, конечно, только немного,本当に только немного, потому что впереди много знаний, которые нужно изучить и освоить. Давайте посмотрим на следующий пример использования Dictionary<TKey, TValue>.
static void Main(string[] args) { Dictionary<int, string> result = GetAll(); } public static Dictionary<int, string> GetAll() { var dic = new Dictionary<int, string>(); dic.Add(1, "aaa"); dic.Add(1, "aaa"); dic.Add(1, "aaa"); return dic; }
Два вида генериков: генерические типы (классы, интерфейсы, делегаты и структуры) и генерические методы, такие как TKey и TValue, являются параметрами типов, а传入ые int и string - это реальные типы, можно看出, что параметры типов являются только занимателями для реальных типов. Генерик, который не предоставляет реальных параметров для типов, называется неconstructed генерическим типом, а если指定ены типы реальных параметров, то это constructed тип, а типовой экземпляр - это объект, который мы используем. Вот диаграмма отношений.
Оценка генериков - это задача, которая вызывает головную боль, и мы будем подробно говорить о ней дальше, возможно, не очень ясно, постараюсь, потому что и я не очень明白, что говорят в книге, сначала поясню это. Если что-то неясно, можно посмотреть объяснение в книге. Давайте посмотрим на следующий рисунок
Когда мы видим такие генерические методы, в реальном использовании необходимо заменить в них типы параметров (ранее уже говорили, что типы параметров являются占ачками для типов реальных параметров), использовать string для замены T, использовать int для замены TOutput
public static List<int> GetAll(Converter<string, int> conv) { }
Converter<string, int> является уже сконструированным типом, conv - это параметр формы, теперь вы должны понять, что делает этот генерический метод: он возвращает список целых чисел, используя экземпляр генерического делегата Converter<string, int> в качестве параметра.
Надеюсь, что изложенные выше C# генерические типы помогут вам!