C# LanguageДженерики


Синтаксис

  • public void SomeMethod <T> () { }
  • public void SomeMethod<T, V>() { }
  • public T SomeMethod<T>(IEnumerable<T> sequence) { ... }
  • public void SomeMethod<T>() where T : new() { }
  • public void SomeMethod<T, V>() where T : new() where V : struct { }
  • public void SomeMethod<T>() where T: IDisposable { }
  • public void SomeMethod<T>() where T: Foo { }
  • public class MyClass<T> { public T Data {get; set; } }

параметры

Параметр (ы) Описание
ТВ Введите заполнители для общих деклараций

замечания

Дженерики в C # поддерживаются вплоть до среды выполнения: общие типы, созданные с помощью C #, будут иметь свою обобщенную семантику, даже после компиляции в CIL .

Это фактически означает, что в C # можно отражать общие типы и видеть их по мере их объявления или проверять, является ли объект экземпляром общего типа, например. Это контрастирует с стиранием типа , когда информация о родовом типе удаляется во время компиляции. Это также контрастирует с шаблоном подход к дженерикам, где несколько конкретных родовых типов становятся множественными не-генерическими типами во время выполнения, и любые метаданные, необходимые для последующего создания исходных описаний общего типа, теряются.

Однако будьте осторожны при отражении на общих типах: имена обобщенных типов будут изменены при компиляции, заменяя угловые скобки и имена типов параметров обратным ходом, а затем число параметров типового типа. Таким образом, Dictionary<TKey, Tvalue> будут переведены на Dictionary`2 .

Дженерики Связанные примеры