Dans le contexte des actions du contrôleur ASP.NET MVC, une restriction est que les « types génériques ouverts » ne peuvent pas être utilisés. Cet article approfondit le concept de types génériques ouverts et fermés dans .NET.
Un type générique ouvert dans .NET est un type qui contient des paramètres de type, qui sont essentiellement des espaces réservés pour des types non spécifiés. Ces types peuvent être des paramètres de type ou des types génériques définis sans spécifier de paramètres de type. Par exemple,
Contrairement aux types génériques ouverts, les types génériques fermés sont des types qui ne contiennent pas de paramètres de type. Ils sont entièrement spécifiés en utilisant des types de béton comme paramètres. Par exemple, List
Alors qu'un type générique ouvert contient des paramètres de type, un type générique non lié est un type générique avec des paramètres de type non spécifiés. Les types non liés ne peuvent pas être utilisés directement dans des expressions, ni être instanciés ou appelés. Ils représentent une définition générique avant de se lier à un type spécifique.
Considérez l'extrait de code suivant :
<code class="language-c#">class Program { static void Main() { Test<int>(); } static void Test<T>() { Console.WriteLine(typeof(List<T>)); // 打印类型名称 } }</code>
Lorsque ce code est exécuté, "System.Collections.Generic.List`1[System.Int32]" sera imprimé, ce qui représente un type ouvert lié car le paramètre de type est connu au moment de l'exécution : System.Int32.
Les types génériques non liés peuvent être liés au moment de l'exécution à l'aide de la méthode Type.MakeGenericType. Par exemple :
<code class="language-c#">Type unboundGenericList = typeof(List<>); Type listOfInt = unboundGenericList.MakeGenericType(typeof(int)); if (listOfInt == typeof(List<int>)) Console.WriteLine("构造了一个 List<int> 类型。");</code>
Comprendre la différence entre les types génériques ouverts, fermés et non liés est essentiel pour utiliser efficacement les génériques dans .NET. En tirant parti de ces concepts, vous pouvez créer un code flexible et réutilisable qui gère efficacement différents types de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!