C# 维护泛型类型集合引用的最佳方法
假设我有这个界面:C# 维护泛型类型集合引用的最佳方法,c#,generics,C#,Generics,假设我有这个界面: public interface IRepository<T> where T : Entity { T Get(string query); void Save(T entity); } 公共接口i假设,其中T:Entity { T Get(字符串查询); 无效保存(T实体); } 我有几个具体的类,比如(其中,用户和项目,当然,从实体继承): 公共类用户存储库:IRepository{…} 公共类ProjectRepository:IProject
public interface IRepository<T> where T : Entity
{
T Get(string query);
void Save(T entity);
}
公共接口i假设,其中T:Entity
{
T Get(字符串查询);
无效保存(T实体);
}
我有几个具体的类,比如(其中,用户和项目,当然,从实体继承):
公共类用户存储库:IRepository{…}
公共类ProjectRepository:IProjectRepository{…}
保存对单个集合中所有这些内容的引用的最佳方式是什么?很明显,你不能有这样的东西:
var repos = new IRepository<Entity>[]
{
new UserRepository(),
new ProjectRepository()
}
var repos=new-IRepository[]
{
新建UserRepository(),
新项目存储库()
}
那么我必须有一个非泛型接口,泛型接口从中继承吗
public interface IRepository
{
Entity Get(string query);
void Save(Entity entity);
}
public interface IRepository<T> : IRepository { ... }
公共接口IRepository
{
实体获取(字符串查询);
作废保存(实体);
}
公共接口IRepository:IRepository{…}
谢谢你的帮助、想法和建议
那么我必须有一个非泛型接口,泛型接口从中继承吗
public interface IRepository
{
Entity Get(string query);
void Save(Entity entity);
}
public interface IRepository<T> : IRepository { ... }
对。如果你能成功的话,你可以在非泛型接口上放更少的方法:这取决于你想做多少类型转换。(例如,您可以将它们放在对象[]
中。)您的IRepository
界面实际上不适合协变或逆变,因为t
同时出现在输入和输出位置。正如您所指出的,您在这里所能做的最好的事情就是提供一个非通用接口
当然,您可以使用
object
存储对任何类型的引用,但我猜您正在寻找比这更安全的类型。是的,我在对象集合中处理这一切,是的,确实想要一种更安全的类型方式。另外,很高兴我问了,我将不得不仔细阅读ISomeInterface的含义:谢谢你的提示。