考虑以下类结构:
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,则会调用基本实现。
Bar
中使用U
?使用Foo<T>
不就足够了吗? - svickFoo<T>
的实例,这意味着使用Foo<T>
作为类型应该可以工作。如果FooBaz
重写了一些方法,那么这些方法将被调用。这就是虚方法的工作原理。 - svick