我需要在两种技术之间进行比较:使用泛型类型和扩展类型。我不是指一般的比较,我的意思是在这种特殊情况下我需要为名为Where T: ClassA
的类添加一些功能
使用通用类型
使用泛型类型(ClassA
)并实现泛型方法
使用扩展方法
通过添加扩展程序
来使用 public static class Helper
{
public static void MethodOne(this ClassA obj, )
{
//
}
}
Repository Pattern
我需要知道:
Entity
总是使用第一种技术?例如,在此implementation中,为什么我们不将扩展方法添加到全局类{{1}}?答案 0 :(得分:5)
这是完全不同的两件事。
您使用泛型来提供通用功能。对于存储库,这通常与"基础实体一起使用"包含所有实体实现的属性的类或接口,如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);
}
如果没有泛型,您必须为每种类型实现存储库或扩展方法。
为什么不在这种情况下使用扩展方法:通常只在不能扩展基类型时使用。使用存储库类,您可以将操作分组到一个逻辑类中。
另请参阅When do you use extension methods, ext. methods vs. inheritance?,What is cool about generics, why use them?。