是一个抽象的概念,将批量具有共性的操作进行抽象,使用泛型类型来表示这个方法,实现这些类型的方法具有相同的逻辑,而唯一不同的是,它们的类型
/// <summary> /// 更新老师与学生的关系 /// </summary> /// <param name="list">要插入的关系列表</param> /// <param name="isAll">是否为全部,如果全部,不需要向关系表插入</param> /// <param name="teacherId">当前老师ID</param> /// <param name="type">>资源类型0课程,1视频,2作业,3文档</param> public void AddUser_Source_R( List<User_Source_R> list, bool isAll, int objId, int objType) { switch (objType) { case 0: UpdateSource_R<Classroom_Info>(list, isAll, objId); break; case 1: UpdateSource_R<Courseware_Info>(list, isAll, objId); break; case 2: UpdateSource_R<Task_Info>(list, isAll, objId); break; case 3: UpdateSource_R<Substance_Info>(list, isAll, objId); break; default: throw new ArgumentException(); } } /// <summary> /// 泛型方法来干这逻辑相同,只是类型不同的事情 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="list"></param> /// <param name="isAll"></param> /// <param name="teacherId"></param> /// <param name="objId"></param> /// <param name="objType"></param> void UpdateSource_R<TEntity>( List<User_Source_R> list, bool isAll, int objId) where TEntity : class, IAccess { var entity = LoadRepository<TEntity>().Find(objId); if (isAll) { entity.AccessStatus = 0; LoadRepository<TEntity>().Update(entity); } else { entity.AccessStatus = 1; LoadRepository<TEntity>().Update(entity); LoadRepository<User_Source_R>().Insert(list); } }