Przeciążanie metod w oparciu o ogólne ograniczenia?
Czy mogę w jakiś sposób przeciążyć metody, które różnią się tylko typem ogólnymograniczenia?
To się nie kompiluje:
void Foo<T>(T bar) where T : class
{
}
void Foo<T>(T bar) where T : struct
{
}
Ponieważ są to metody „otwarte”, rzeczywista metoda powinna być zamknięta / skonstruowana / w pełni zdefiniowana, gdy jest odwołana w innym miejscu w kodzie z konkretnie wpisanymT
, a następnie byłoby jasne, które przeciążenie wywołać.
Oczywistym rozwiązaniem jest nie przeciążanie ich, ale zastanawiam się, dlaczego to nie działa w C #?
Dodatkowe pytanie: Jeśli jest to tylko ograniczenie kompilatora C #, czy IL zezwala na takie przeciążenie?