基类中的函数,返回继承类类型的List

Jac*_*opo 1 c#

让我们假设我有这三个类

class A {

    protected List<T> MakeList<T>() {
        return new List<T>
    }

}

class B : A {

    protected void MyFunction() {
        List<B> = MakeList<B>();
    }

}

class C : A {

    protected void MyFunction() {
        List<C> = MakeList<C>();
    }

}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我永远不需要MakeList()函数返回与调用者类不同的类类型.是否可以更改A中的MakeList函数以允许B和C调用它而不指定Type?(例如,简单地使用List = MakeList() - 省略调用函数时)

Dav*_*idG 6

您可以使您的基类通用:

class A<T> where T : A<T>
{
    protected List<T> MakeList()
    {
        return new List<T>
    }
}

class B : A<B>
{
    protected void MyFunction()
    {
        List<B> x = MakeList();
    }
}

class C : A<C>
{
    protected void MyFunction()
    {
        List<C> x = MakeList();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 你为什么想这么做? (2认同)