考虑以下类结构:
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,则将调用基本实现。
最佳答案
如果class Bar
不需要是通用的,那么为什么要使其成为一体?
这将工作:
public class Foo<T, U> where U : Foo<T, U>
{
public class Bar
{
private T t;
private U u;
}
}
public class Baz
{
}
public class FooBaz : Foo<Baz, FooBaz>
{
}
然后
var bar = new FooBaz.Bar();
当然,所有这些都是完全抽象的,因此它可能会也可能不会应用于实际示例。您到底想在这里实现什么?
关于c# - 在嵌套类中使用C#泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7932560/