我有一个方法,应该返回一个实现通用接口的对象.它接受一个参数来确定实例化哪个类并返回实例化的对象.
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'找不到"错误?
编写返回类型是实现通用接口的对象的方法的正确方法是什么?
对于初学者来说,你的Retrieve方法必须是通用的Retrieve<T>.然后问题变成,当你调用它时,你需要指定类型T.如果您Player1和您的AnotherPlayer实现不相同IPlayer<T>(意味着T不同),那么您将指定什么作为通用的类型?
您可以做的是,创建一个IPlayer非泛型接口,在其中将所有非泛型内容移动到其中,然后IPlayer<T>从该接口继承,添加泛型属性/方法.然后,您的方法可以返回非泛型IPlayer.
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |