Maison > développement back-end > C++ > Les constructeurs génériques C# peuvent-ils appliquer des types de paramètres spécifiques au-delà des constructeurs sans paramètre ?

Les constructeurs génériques C# peuvent-ils appliquer des types de paramètres spécifiques au-delà des constructeurs sans paramètre ?

Mary-Kate Olsen
Libérer: 2025-01-14 15:52:43
original
682 Les gens l'ont consulté

Le constructeur générique C# peut-il forcer la spécification du type de paramètre ? Au-delà des limites des constructeurs sans paramètres

En C#, des contraintes peuvent être imposées sur les méthodes génériques pour garantir que des exigences spécifiques sont respectées. Une contrainte courante consiste à spécifier qu'un type générique doit avoir un constructeur sans paramètre. Cependant, une question naturelle se pose : peut-on imposer des contraintes plus spécifiques au constructeur ?

Cas : Type de paramètre forcé

Prenons l'exemple fourni dans la question, où nous voulons forcer un constructeur qui accepte un paramètre float[,]. Première tentative :

public static T Method<T>(T a) where T : new(float[,] u) {
    //...do something...
    return new T(new float[0, 0]);
}
Copier après la connexion

La compilation a échoué, nous obligeant à chercher des alternatives.

Solution : Créer un délégué personnalisé

Pour contourner cette limitation, nous avons adopté une solution de contournement en introduisant un délégué responsable de la création des instances de type T. Ce délégué prend les paramètres nécessaires comme paramètres et renvoie une instance de T.

public static void Method<T>(T a, Func<float[,], T> creator) {
    //...do something...
}
Copier après la connexion

Modifiez notre code pour utiliser ce délégué, avec les résultats suivants :

A.Method(float[,], instanceCreator);
Func<float[,], T> instanceCreator = (float[,] arr) => new T(arr);
Copier après la connexion

Cette solution nous permet d'imposer des contraintes plus complexes au constructeur en passant un délégué adapté.

Can C# Generic Constructors Enforce Specific Parameter Types Beyond Parameterless Constructors?

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 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