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
Susan Sarandonoriginal
2025-01-14 16:12:44234parcourir

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>

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>

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!

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