Heim >Backend-Entwicklung >C++ >Können generische C#-Einschränkungen Konstruktoren mit bestimmten Parametertypen angeben?
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>
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>
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!