Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建泛型类C#_C#_C# 4.0_Generics - Fatal编程技术网

创建泛型类C#

创建泛型类C#,c#,c#-4.0,generics,C#,C# 4.0,Generics,我正在处理一个实体列表的存储库,我应该多次重复同一个类,唯一的区别是类型。。有没有办法让它变得通用 这应该很容易,当然我不知道如何使它通用: private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository(); 我要重复的课程是: public class UserProfileRepository : IEntityRepository<IUserProfile>

我正在处理一个实体列表的存储库,我应该多次重复同一个类,唯一的区别是类型。。有没有办法让它变得通用

这应该很容易,当然我不知道如何使它通用:

 private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();
我要重复的课程是:

public class UserProfileRepository : IEntityRepository<IUserProfile>
{
   private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();

   public IUserProfile[] GetAll()
   {
     return _rep.GetAll();
   }

   public IUserProfile GetById(int id)
   {
     return _rep.GetById(id);
   }

   public IQueryable<IUserProfile> Query(Expression<Func<IUserProfile, bool>> filter)
   {
     return _rep.Query(filter);
   }
}
公共类UserProfileRepository:IEntityRepository { private Namespace.DAL.UserProfileRepository _rep=new Namespace.DAL.UserProfileRepository(); 公共IUserProfile[]GetAll() { 返回_rep.GetAll(); } 公共IUserProfile GetById(int id) { 返回_rep.GetById(id); } 公共IQueryable查询(表达式筛选器) { 返回代表查询(过滤器); } }
@NickBray击中了头部的钉子。无论实际的具体存储库实现有多不同或相似,示例中的
DAL
类都应该通过接口公开存储库实例

理想情况下,公开的接口应该声明如下

interface IUserProfileRepository : IEntityRepository<IUserProfile>
{
}
接口IUserProfileRepository:IEntityRepository
{
}

这样,您可以根据需要添加自定义的
IUserProfile
方法。而
IEntityRepository
接口将定义常见的方法
Add
Update
Remove
和各种
QueryXXX
方法。

我希望这个示例对您有所帮助。如果我正确理解了您的问题,那么您希望基于接口“IEntityRepository”使存储库可生成

试着这样做:


    public class UserProfileRepository<TUserProfile> : IEntityRepository<TUserProfile> where TUserProfile : IUserProfile
    {
       private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();

       public TUserProfile[] GetAll()
       {
         return _rep.GetAll();
       }

       public TUserProfile GetById(int id)
       {
         return _rep.GetById(id);
       }

       public IQueryable<TUserProfile> Query(Expression<Func<TUserProfile, bool>> filter)
       {
         return _rep.Query(filter);
       }
    }

公共类UserProfileRepository:IEntityRepository,其中TUserProfile:IUserProfile
{
private Namespace.DAL.UserProfileRepository _rep=new Namespace.DAL.UserProfileRepository();
公共TUserProfile[]GetAll()
{
返回_rep.GetAll();
}
公共TUserProfile GetById(int id)
{
返回_rep.GetById(id);
}
公共IQueryable查询(表达式筛选器)
{
返回代表查询(过滤器);
}
}

有关您的问题,请查看此链接。是否要将Namespace.DAL.UserProfileRepository设置为通用?然后可以定义一个名为Namespace.DAL.Repository的新类。创建泛型非常容易,我只想指出,当您使用这些存储库时,使用它们的代码应该使用接口IEntityRepository,而不是直接使用该接口的实现。