Вы не можете наследовать от параметра generic type, потому что этот тип неизвестен во время компиляции, поэтому компилятор не может понять, что такое суперкласс. Я понимаю, что на первый взгляд тот факт, что компилятор может определить, что & lt; T & gt; похоже, предполагает, что он должен иметь возможность выяснить, что такое T, но две вещи разные.
Кроме того, у вас есть логическая проблема в баре. Вы не можете вызвать base.Bar, потому что это абстрактный тип. Чтобы исправить это, вам нужно будет изменить свою реализацию в Foo на
public virtual void Bar() {}