Рассмотрим следующую структуру класса:
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, вместо этого вызывается базовая реализация.