加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#:扩展泛型类

发布时间:2020-12-15 23:49:55 所属栏目:百科 来源:网络整理
导读:partial class RepositoryTEntity : IRepositoryTEntity where TEntity : class{} 我的通用存储库为TEntity实现了一组通用的方法 public TEntity Get(int id){ return _context.SetTEntity() .Find(id);}public TEntity Get(ExpressionFuncTEntity,bool pred
partial class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
}

我的通用存储库为TEntity实现了一组通用的方法

public TEntity Get(int id)
{
    return _context.Set<TEntity>()
        .Find(id);
}

public TEntity Get(Expression<Func<TEntity,bool>> predicate)
{
    return _context.Set<TEntity>()
}

我可以访问

Repository<User>().Get();

许多存储库执行相同的操作集,因此它很有用,但现在我想扩展Repository< User>支持一些额外的行为.

partial class Repository<User> : IRepository<User> 
{
    public user DoMagicFunction()
    {
    }
}

所以我可以像使用存储库一样

Repository<User>().DoMagicFunction();

如何为Some Tentity扩展相同的泛型类以扩展新行为而不是修改它.

我可以像创建另一个UserRepository来支持新功能一样,但访问者将成为

UserRepository.DoMagicFunction();

但我希望它像

Repository<User>().DoMagicFunction();

解决方法

您可以使用扩展方法:

public static class ExtensionMethods {

    public static User DoMagicFunction(this Repository<User> repository) {
        // some magic
        return null; //or another user
    } 

}

因此,这将以一种语法上很好的方式将函数添加到Repository< User>对象.

如果您不仅要为用户提供支持,还要为用户的子类提供支持,您可以使该功能通用:

public static class ExtensionMethods {

    public static TEntity DoMagicFunction<TEntity>(this Repository<TEntity> repository)
        where TEntity : User {
        // some magic
        return null; //or another TEntity
    } 

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读