Einschränkungen und Überladung
In C# können generische Einschränkungen auf Typparameter angewendet werden, um die verwendbaren Typen einzuschränken. Wenn jedoch eine Einschränkung für einen Parameter festgelegt wird, wirkt sich dies auf den Prozess der Überladungsauflösung aus.
Betrachten Sie den folgenden Code:
static void Foo<T>(T a) where T : struct { } // 1 static void Foo<T>(T? a) where T : struct { } // 2
Diese beiden Funktionen überladen Foo und werden anhand der Nullbarkeit unterschieden von T. Der Versuch, eine dritte Überladung mit einer Einschränkung für Klassentypen hinzuzufügen, schlägt jedoch fehl:
static void Foo<T>(T a) where T : class { } // 3
Dies liegt daran, dass die Parameter dieser Funktion mit der übereinstimmen Parameter von Foo
class RequireStruct<T> where T : struct { } class RequireClass<T> where T : class { } static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // 1 static void Foo<T>(T? a) where T : struct { } // 2 static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
Jetzt kann Foo überladen werden, um alle drei Fälle zu verarbeiten:
Das obige ist der detaillierte Inhalt vonWie wirkt sich die NULL-Zulässigkeit generischer Einschränkungen auf die Überladung von C#-Methoden aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!