考虑以下类结构:

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/

10-11 04:10