繁体   English   中英

泛型与扩展方法

[英]Generic type vs Extension method

我需要对两种技术进行比较:使用泛型和扩展类型。 我并不是要进行一般的比较,而是在这种特定情况下,当我需要向名为ClassA的类中添加一些功能时

  1. 使用通用类型

    使用泛型( Where T: ClassA )并实现泛型方法

  2. 使用扩展方法

    通过添加其扩展方法来使用ClassA

      public static class Helper { public static void MethodOne(this ClassA obj, ) { // } } 

我需要知道 :

  • 与其他技术相比,每种技术有哪些优势?
  • 为什么第一种技术总是在Repository Pattern 例如,在此实现中,为什么不向全局类Entity添加扩展方法?

那是两个完全不同的东西。

您可以使用泛型来提供泛型功能。 对于存储库,通常将其与包含所有实体实现的属性的“基础实体”类或接口一起使用,例如ID

public interface IEntity
{
    int ID { get; set; }
}

public class Client : IEntity
{
    public int ID { get; set; }
    public string Name { get; set; }        
}

public class Repository<T> 
    where T : IEntity
{
    private readonly IQueryable<T> _collection;
    public Repository(IQueryable<T> collection)
    {
        _collection = collection;
    }

    public T FindByID(int id)
    {
        return _collection.First(e => e.ID == id);
    }
}

您也可以使用扩展方法来做到这一点:

public static T FindByID(this IQueryable<T> collection, int id)
    where T : IEntity
{
    return collection.First(e => e.ID == id);
}

如果没有泛型,则必须为每种类型实现存储库或扩展方法。

在这种情况下为什么不使用扩展方法:通常仅在无法扩展基本类型时才使用扩展方法。 使用存储库类,您可以将操作分组为一个逻辑类。

另请参见何时使用扩展方法ext。 方法与继承? 泛型有什么优点,为什么要使用它们?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM