Использование дженериков C # во вложенном классе

Рассмотрим следующую структуру класса:

public class Foo<T>
{
    public virtual void DoSomething()
    {
    }

    public class Bar<U> where U : Foo<T>, new()
    {
        public void Test()
        {
            var blah = new U();
            blah.DoSomething();
        }
    }
}

public class Baz
{
}

public class FooBaz : Foo<Baz>
{
    public override void DoSomething()
    {
    }
}

Когда я перехожу к использованию вложенного класса, я получаю что-то вроде следующего:

var x = new FooBaz.Bar<FooBaz>();

Кажется излишним указывать его дважды. Как мне создать структуру своего класса, чтобы я мог сделать это вместо этого:

var x = new FooBaz.Bar();

Разве в предложении where вложенного класса не должно быть способа сказать, что U всегда является родителем? Как?


Обновление: Добавлены методы для DoSomething () выше, чтобы учесть некоторые комментарии. Важно, чтобы когда я вызываю DoSomething, он обращается к переопределенной версии. Если я просто использую Foo вместо U, вместо этого вызывается базовая реализация.

6
задан Matt Johnson-Pint 28 October 2011 в 18:38
поделиться