Можно ли каким-то образом перегружать методы, которые отличаются только ограничениями общего типа?
Это не скомпилируется:
void Foo<T>(T bar) where T : class
{
}
void Foo<T>(T bar) where T : struct
{
}
Так как это "открытые" методы, фактический метод должен быть закрыт/построен/полностью определен, когда он ссылается в другом месте кода с конкретным типом T
, и тогда будет ясно, какую перегрузку нужно вызвать.
Очевидным решением является не перегрузка, но мне интересно, почему это не работает на С#?
Дополнительный вопрос: если это просто ограничение компилятора С#, разрешает ли IL такая перегрузка?