Maison > développement back-end > C++ > Comment les contraintes génériques peuvent-elles différencier efficacement les types valeur et référence en C# ?

Comment les contraintes génériques peuvent-elles différencier efficacement les types valeur et référence en C# ?

Mary-Kate Olsen
Libérer: 2024-12-30 19:00:16
original
937 Les gens l'ont consulté

How Can Generic Constraints Effectively Differentiate Between Value and Reference Types in C#?

Contraintes génériques : Distinguer les types valeur et référence

Introduction

En programmation générique, les contraintes nous permettent de spécifier des restrictions sur les paramètres de type. Un problème courant consiste à faire la différence entre les types valeur (par exemple, les entiers) et les types référence (par exemple, les chaînes). Cette question explore un cas où les contraintes sur les paramètres de type ne se résolvaient pas comme prévu.

Le problème

L'auteur a posé le défi de faire la distinction entre différents scénarios de type valeur : simple types de valeur (int), types de valeur nullables (int?) et types de référence (string). Initialement, ils ont proposé d'utiliser Where T : struct pour identifier les types de structure (types de valeur) et Where T : class pour identifier les types de référence, mais cela a entraîné une erreur de compilation en raison de définitions de membres en double.

Le Solution

L'idée clé est que les contraintes ne font pas partie de la signature de la méthode et que la résolution des surcharges prend en compte les types de paramètres. Ainsi, l'auteur a placé la contrainte dans un paramètre pour différencier les types valeur et référence. Voici le code révisé :

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
Copier après la connexion

En utilisant ces classes d'assistance, le code fait désormais correctement la distinction entre les différents scénarios de type valeur. Foo(z) sera compilé et mappé à la méthode (3), car la chaîne est un type de référence.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal