Maison >développement back-end >C++ >Comment les contraintes génériques C# peuvent-elles faire la distinction entre les types valeur, les types valeur nullable et les types référence ?

Comment les contraintes génériques C# peuvent-elles faire la distinction entre les types valeur, les types valeur nullable et les types référence ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-02 17:13:39704parcourir

How Can C# Generic Constraints Distinguish Between Value Types, Nullable Value Types, and Reference Types?

Contraintes génériques : différencier les valeurs et les références

En C#, les contraintes génériques peuvent être utilisées pour appliquer des exigences spécifiques sur les paramètres de type. Ceci est particulièrement utile pour faire la distinction entre les types valeur, les types valeur nullable et les types référence.

Contraintes pour les types valeur et valeur nullable

Considérez le code suivant, qui différencie entre les types de valeur simple et les types de valeur nullables :

static void Foo<T>(T a) where T : struct { } // Plain value type (e.g. int)
static void Foo<T>(T? a) where T : struct { } // Nullable value type (e.g. int?)

Contraintes de référence Types

Cependant, tenter de définir une contrainte pour les types de référence en utilisant la classe Where T : entraîne une erreur du compilateur. En effet, les contraintes sont appliquées lors de la résolution de la surcharge et les paramètres ont priorité sur les contraintes.

Pour résoudre ce problème, la contrainte peut être placée dans un paramètre, quoique de manière moins élégante :

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 { } // Plain value type
static void Foo<T>(T? a) where T : struct { } // Nullable value type
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // Reference type

En plaçant la contrainte dans le paramètre facultatif ignorer, le compilateur peut distinguer les différents cas sans entrer en conflit avec les types de paramètres. Cela permet le mappage prévu des types de référence à la surcharge de fonction correcte.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn