English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Глубокий анализ generics в C#

В предыдущей статье я介绍了 краткий анализ системы типов в 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# генерические типы помогут вам!

Вам может понравиться