Maison > développement back-end > C++ > Les contraintes génériques C# peuvent-elles spécifier des constructeurs avec des types de paramètres spécifiques ?

Les contraintes génériques C# peuvent-elles spécifier des constructeurs avec des types de paramètres spécifiques ?

Susan Sarandon
Libérer: 2025-01-14 16:12:44
original
231 Les gens l'ont consulté

Can C# Generic Constraints Specify Constructors with Specific Parameter Types?

Constructeur générique C# et contraintes de paramètres

Les contraintes génériques en C# permettent de spécifier des conditions sur les paramètres de type. La contrainte "new()" est l'une des contraintes courantes qui garantit qu'un type possède un constructeur sans paramètre. Cependant, certaines situations peuvent nécessiter des contraintes plus spécifiques sur les paramètres du constructeur.

Question :

Puis-je spécifier une contrainte générique qui nécessite l'existence d'un constructeur avec un type de paramètre spécifique ? Par exemple, un type générique T peut-il être contraint d'avoir un constructeur qui accepte un paramètre « float[,] » ?

Comme indiqué ci-dessous, essayer directement d'implémenter de telles contraintes entraînera l'échec de la compilation :

<code class="language-csharp">public class A {
    public static T Method<T>(T a) where T : new(float[,] u) {
        return new T(new float[0, 0]);
    }
}</code>
Copier après la connexion

Réponse :

Malheureusement, de telles contraintes ne peuvent pas être spécifiées directement en C#. Cependant, il existe une solution de contournement.

Solution de contournement :

Une solution de contournement courante consiste à fournir un délégué qui crée un objet du type requis avec des paramètres spécifiés. Ce délégué peut ensuite être passé en paramètre à la méthode générique.

<code class="language-csharp">public class A {
    public static void Method<T>(T a, Func<float[,], T> creator) {
        // ... 执行某些操作 ...
    }
}</code>
Copier après la connexion

Cette approche permet une flexibilité dans la spécification des paramètres du constructeur, car le délégué peut être personnalisé pour instancier des objets avec des valeurs spécifiques.

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