创建一个返回实现通用接口的对象的方法

use*_*754 3 c# asp.net oop

我有一个方法,应该返回一个实现通用接口的对象.它接受一个参数来确定实例化哪个类并返回实例化的对象.

    public class PlayerRetriever
    {
        public static IPlayer<T> Retrieve(string SitePath)
        {
            if (SitePath == "Home") { return new Player1(); }
            else { return new AnotherPlayer(); }
        }
    }
    interface IPlayer<T>
    {
        void RunPlayer();
        List<T> RetrievePlayersByMovie(string movie);
    }
Run Code Online (Sandbox Code Playgroud)

"Player1"和"AnotherPlayer"都实现了IPlayer.

为什么我的方法在我的方法类型中的"T"下给我"类型或名称空间'T'找不到"错误?

编写返回类型是实现通用接口的对象的方法的正确方法是什么?

BFr*_*ree 6

对于初学者来说,你的Retrieve方法必须是通用的Retrieve<T>.然后问题变成,当你调用它时,你需要指定类型T.如果您Player1和您的AnotherPlayer实现不相同IPlayer<T>(意味着T不同),那么您将指定什么作为通用的类型?

您可以做的是,创建一个IPlayer非泛型接口,在其中将所有非泛型内容移动到其中,然后IPlayer<T>从该接口继承,添加泛型属性/方法.然后,您的方法可以返回非泛型IPlayer.