保持对泛型类型集合的引用的最佳方法

时间:2010-07-01 16:53:37

标签: c# generics

说我有这个界面:

public interface IRepository<T> where T : Entity
{
  T Get(string query);
  void Save(T entity);
}

我有几个具体的类(当然,User和Project继承自Entity):

public class UserRepository : IRepository<User> { ... }
public class ProjectRepository : IProjectRepository<Project> { ... }

在单个集合中保留对所有这些内容的引用的最佳方法是什么?你显然不能有这样的东西:

var repos = new IRepository<Entity>[]
{
  new UserRepository(),
  new ProjectRepository()
}

所以必须我有一个通用接口继承的非通用接口?

public interface IRepository
{
  Entity Get(string query);
  void Save(Entity entity);
}

public interface IRepository<T> : IRepository { ... }

感谢您的任何帮助,想法和建议。

2 个答案:

答案 0 :(得分:2)

由于IRepository<T>出现在两个的输入和输出位置,因此T界面并不能真正适用于共同或反向差异。你可以在这里做的最好的事情就是提供一个非通用的界面。

当然,你可以使用object存储对任何类型的引用 - 但我猜你正在寻找比这更安全的东西。

答案 1 :(得分:1)

  

那么我必须有一个非通用接口,通用接口继承这个接口吗?

是。你可以在非泛型接口上放置更少的方法,如果你可以侥幸使用它:它取决于你想要做多少类型转换。 (例如,您可以将它们放在object[]中。)