我有以下域對象:使用其中一個接口聲明
public class Bank : IEntity
{
}
而下面的IRepository:
public interface IRepository<TEntity> where TEntity : IEntity
{
}
是在where TEntity : IEntity
需要的?這是什麼意思,TEntity是IEntity類型?當我使用諸如TEntity之類的東西時,是否有任何命名約定? T代表什麼?
我有以下域對象:使用其中一個接口聲明
public class Bank : IEntity
{
}
而下面的IRepository:
public interface IRepository<TEntity> where TEntity : IEntity
{
}
是在where TEntity : IEntity
需要的?這是什麼意思,TEntity是IEntity類型?當我使用諸如TEntity之類的東西時,是否有任何命名約定? T代表什麼?
您的IRepository
是一個通用類,而TEntity
是泛型類型參數。它就像實際類型的佔位符。
TEntity: IEntity
意味着你將需要實際的類型所使用農具IEntity
和實際倉庫實現你可以參考由接口IEntity
暴露的方法和屬性。
是否需要取決於存儲庫的預期用途。通常,類型限制用於強制執行泛型所依賴的類型的某些屬性。
where TEntity : IEntity
意味着TEntity
類型必須實現IEntity
接口。換句話說,在您的通用接口IRepository
中,您可以使用實現接口的類型。
這取決於您的設計時間需求。
您可以使用IEntity
替代通用TEntity
。但是,那麼您將僅限於IEntity
的會員。
您將不得不投入IEntity
成員才能訪問其子類型成員。
您可以在Why use generic constraints?中閱讀關於通用約束條件及其使用方法的信息,您也可以查看MSDN docs獲取更多官方信息。
至於'T',這是嚴格意義上的迴歸C++,當這種事情被稱爲'templates'。 (然而,這是一個應該遵循的慣例。)