2011-04-07 73 views
0

我有以下域對象:使用其中一個接口聲明

public class Bank : IEntity 
{ 
} 

而下面的IRepository:

public interface IRepository<TEntity> where TEntity : IEntity 
{ 
} 

是在where TEntity : IEntity需要的?這是什麼意思,TEntity是IEntity類型?當我使用諸如TEntity之類的東西時,是否有任何命名約定? T代表什麼?

回答

2

您的IRepository是一個通用類,而TEntity是泛型類型參數。它就像實際類型的佔位符。

TEntity: IEntity意味着你將需要實際的類型所使用農具IEntity和實際倉庫實現你可以參考由接口IEntity暴露的方法和屬性。

是否需要取決於存儲庫的預期用途。通常,類型限制用於強制執行泛型所依賴的類型的某些屬性。

1

where TEntity : IEntity意味着TEntity類型必須實現IEntity接口。換句話說,在您的通用接口IRepository中,您可以使用實現接口的類型。

1

這取決於您的設計時間需求。

您可以使用IEntity替代通用TEntity。但是,那麼您將僅限於IEntity的會員。

您將不得不投入IEntity成員才能訪問其子類型成員。

2

您可以在Why use generic constraints?中閱讀關於通用約束條件及其使用方法的信息,您也可以查看MSDN docs獲取更多官方信息。

至於'T',這是嚴格意義上的迴歸C++,當這種事情被稱爲'templates'。 (然而,這是一個應該遵循的慣例。)