Methodenüberladung basierend auf generischen Einschränkungen?
Kann ich irgendwie Methoden überladen haben, die sich nur nach generischem Typ unterscheidenEinschränkungen?
Dies kompiliert nicht:
void Foo<T>(T bar) where T : class
{
}
void Foo<T>(T bar) where T : struct
{
}
Da es sich um "offene" Methoden handelt, sollte die eigentliche Methode geschlossen / konstruiert / vollständig definiert werden, wenn sie an einer anderen Stelle im Code mit einer konkreten Typisierung referenziert wirdT
, und dann wäre klar, welche Überladung aufzurufen ist.
Die offensichtliche Lösung besteht darin, sie nicht zu überladen, aber ich frage mich, warum dies in C # nicht funktioniert.
Zusätzliche Frage: Wenn dies nur eine C # -Compiler-Einschränkung ist, lässt die IL eine solche Überladung zu?