C # 4.0 La collaboration génétique et l'onduleur
C # 4.0 introduit le support pour la collaboration génétique et l'onduleur, ce qui rend la généalogie des types génériques plus flexible. Dans la première version de C #, essayer
attribuer à List<string>
provoquera l'erreur du compilateur, bien que List<object>
puisse accueillir tout objet pouvant être converti en chaîne. List<string>
) de se coordonner, et le type de variant d'entrée (tel que IEnumerable<T>
) est inversé. Action<T>
La coordination permet à un type d'être utilisé comme alternative à un autre type dans la structure hiérarchique de l'héritage. Par exemple,
peut être affecté à, car la chaîne est un objet. Cela est dû au fait que List<string>
est déclaré List<object>
, indiquant qu'il ne peut sortir que la valeur du type T. Par conséquent, tant que n'est utilisé que pour la valeur de lecture, il est sûr de l'utiliser comme IEnumerable<T>
. IEnumerable<out T>
List<string>
revers List<object>
Disposter permet à un type d'être utilisé comme alternative à un autre type dans la structure hiérarchique de l'héritage. Par exemple, peut être attribué à , car les objets peuvent recevoir une chaîne sous forme de paramètres. En effet,
est déclaré, indiquant qu'il ne peut accepter que la valeur du type T. Par conséquent, tant que est utilisé uniquement pour transmettre une valeur, il est sûr de l'utiliser comme Action<object>
. Action<string>
Action<T>
Implémentez les détails Action<in T>
Action<object>
Action<string>
En C # 4.0, la variance est réalisée en utilisant le support collaboratif et inverse de CLR. Cela fait que C # 4.0 prend en charge la variance sans affecter le type de sécurité.
Lorsque la déclaration de type générique est la déformation de sortie ou la déformation d'entrée, le compilateur génère du code IL supplémentaire pour vérifier la variance du paramètre de type pendant l'exécution. Cela garantit que la coordination et l'inversion sont utilisés de manière sûre.
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!