Contraintes et surcharges
En C#, des contraintes génériques peuvent être appliquées aux paramètres de type pour restreindre les types pouvant être utilisés. Cependant, lorsqu'une contrainte est placée sur un paramètre, cela affecte le processus de résolution de surcharge.
Considérez le code suivant :
static void Foo<T>(T a) where T : struct { } // 1 static void Foo<T>(T? a) where T : struct { } // 2
Ces deux fonctions surchargent Foo et se différencient en fonction de la nullité de T. Cependant, tenter d'ajouter une troisième surcharge avec une contrainte sur les types de classe échoue :
static void Foo<T>(T a) where T : class { } // 3
C'est parce que les paramètres de cette fonction correspondent les paramètres de Foo
class RequireStruct<T> where T : struct { } class RequireClass<T> where T : class { } static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // 1 static void Foo<T>(T? a) where T : struct { } // 2 static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
Maintenant, Foo peut être surchargé pour gérer les trois cas :
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!