請考慮這個接口:C#泛型是關鍵字協方差/逆變式inferral
public interface IInitialiazableEntity<TRepository> where TRepository : class, IRepository
{
void Initialize(TRepository repository);
}
這個類(片段):
public class SomeFacade<TRepository> where TRepository : class, IRepository
{
public void Add<TEntity>(TEntity entity) where TEntity : AbstractEntity
{
try
{
if (entity is IInitialiazableEntity<TRepository>)
(entity as IInitialiazableEntity<TRepository>).Initialize(this.Repository);
}
catch (Exception ex)
{
this.Logger.Error(ex);
}
}
}
與實體:
public class Student : AbstractEntity, IInitialiazableEntity<IRepository>
{
void Initialize(IRepository repository) { ... }
}
由於學生只有IInitialiazableEntity<IRepository>
和門面將有一個比t更專業的實際儲存庫他基本上是IRepository
(即它將是IMySpecialRepository : IRepository
),is
關鍵字會意識到它可以將IMySpecialRepository
強制轉換爲實體的Initialize
方法?或者如果不是,該怎麼做?
你試過了嗎?此外,什麼是IMySpecialRepository和IMySpecializedRepository? – ken2k 2014-11-03 13:42:02
對不起,我知道我可以測試這個,然後嘗試找到一個解決方案,但我很匆忙。我認爲這對其他人很有用(因爲標題/標籤是正確的)。 – 2014-11-03 13:45:28
@ ken2k特殊(ized)存儲庫(有一個錯字,兩者是相同的,我糾正了它) - 是從基本IRepository繼承的任何東西。 – 2014-11-03 13:47:22