簡體   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