1
我認爲我不太瞭解泛型以使我的代碼正常工作,但我找不到解釋它爲什麼不起作用的解釋。如何鏈接泛型和派生類型?
我有這個通用抽象類庫:
public abstract class RepositoryBase
{
}
我必須實例化它作爲SpecificRepository:
public class SpecificRepository : RepositoryBase
{
}
現在,我有這個通用抽象類ManagerBase這使用必須派生自的通用類型庫信息庫 :
public abstract class ManagerBase<T> where T : RepositoryBase
{
public T repository;
protected ManagerBase(T repository)
{
this.repository = repository;
}
}
,我必須與SpecificManager實例化:
public class SpecificManager : ManagerBase<SpecificRepository>
{
public SpecificManager(SpecificRepository repostRepository) : base(repostRepository)
{
}
}
這樣一來,我可以有一個類從派生每個類派生RepositoryBase從ManagerBase。
但我不能有一個ControllerBase和SpecificController如:
public class ControllerBase<T> where T : ManagerBase<RepositoryBase>
{
public T manager;
protected ControllerBase(T manager)
{
this.manager = manager;
}
}
public class SpecificController : ControllerBase<SpecificManager>
{
public SpecificController(SpecificManager manager) : base(manager)
{
}
}
看來,我可以這樣做:
public abstract class ControllerBase<T> where T : ManagerBase<SpecificRepository>
{
public T manager;
protected ControllerBase(T manager)
{
this.manager = manager;
}
}
public class SpecificController : ControllerBase<SpecificManager>
{
public SpecificController(SpecificManager manager) : base(manager)
{
}
}
這並不適合我的需要雖然。
可有人請向我解釋什麼,我理解錯了,如何是我想繼續要能夠有一個SpecificManager每班從派生ControllerBase?
在此先感謝。
問候。
假設你有一個泛型類型,'g^'(所以,一個名爲'T'一個類型參數)。進一步假設你還有兩種類型,'T1'和'T2',並且這些類型之間有某種形式的繼承關係。僅僅因爲他們有這種繼承關係,那不會**意味着'G '和'G '具有相同的*關係。實際上,'G '和'G '類型之間有* no *繼承關係。 –