Heim > Backend-Entwicklung > C++ > Können generische C#-Einschränkungen Konstruktoren mit bestimmten Parametertypen angeben?

Können generische C#-Einschränkungen Konstruktoren mit bestimmten Parametertypen angeben?

Susan Sarandon
Freigeben: 2025-01-14 16:12:44
Original
231 Leute haben es durchsucht

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

Generischer C#-Konstruktor und Parametereinschränkungen

Generische Einschränkungen in C# ermöglichen die Angabe von Bedingungen für Typparameter. Die „new()“-Einschränkung ist eine der häufigsten Einschränkungen, die sicherstellt, dass ein Typ über einen Konstruktor ohne Parameter verfügt. In einigen Situationen sind jedoch möglicherweise spezifischere Einschränkungen für Konstruktorparameter erforderlich.

Frage:

Kann ich eine generische Einschränkung angeben, die die Existenz eines Konstruktors mit einem bestimmten Parametertyp erfordert? Kann beispielsweise ein generischer Typ T auf einen Konstruktor beschränkt werden, der einen „float[,]“-Parameter akzeptiert?

Wie unten gezeigt, führt der direkte Versuch, solche Einschränkungen zu implementieren, dazu, dass die Kompilierung fehlschlägt:

<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>
Nach dem Login kopieren

Antwort:

Leider können solche Einschränkungen nicht direkt in C# angegeben werden. Es gibt jedoch eine Problemumgehung.

Problemumgehung:

Eine übliche Problemumgehung besteht darin, einen Delegaten bereitzustellen, der ein Objekt des erforderlichen Typs mit angegebenen Parametern erstellt. Dieser Delegat kann dann als Parameter an die generische Methode übergeben werden.

<code class="language-csharp">public class A {
    public static void Method<T>(T a, Func<float[,], T> creator) {
        // ... 执行某些操作 ...
    }
}</code>
Nach dem Login kopieren

Dieser Ansatz ermöglicht Flexibilität bei der Angabe von Konstruktorparametern, da der Delegat angepasst werden kann, um Objekte mit bestimmten Werten zu instanziieren.

Das obige ist der detaillierte Inhalt vonKönnen generische C#-Einschränkungen Konstruktoren mit bestimmten Parametertypen angeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage