Поскольку Foo является абстрактным типом.
Если вы внедрили Foo в класс, то использовали его в шаблоне, тогда вы могли бы это сделать.
Вы также можете использовать интерфейс для сделайте то, что вы пытаетесь сделать, я верю.
Edit:
Во второй раз, глядя на ваш код, это бессмысленно. Вам нужно будет создать базовый класс типа GENERIC, а затем извлечь из этого, чтобы достичь того, что вы пытаетесь сделать. Это также придало бы еще больший смысл ...
abstract class Foo<T>
{
public virtual void Bar();
}