public class Manager<T> where T: IBallGame
{
T GetManager()
{
//if T is ISoccer return new Soccer()
//if T is IFootball return new Football()
//This wont work. Why?
if (typeof(T) == typeof(ISoccer))
return new Soccer();
}
}
Interface ISoccer: IBallgame
{
}
class Soccer: ISoccer
{
}
Interface IFootball: IBallgame
{
}
class Football:IFootball
{
}
我已經檢出這個問題How do I make the return type of a method generic?。有沒有比Convert.ChangeType()更優雅的東西?在c中返回泛型類型#
爲什麼在類型有限制時不能返回足球或足球的實例?
我認爲因爲足球和足球需要滿足兩個接口才能符合經理級聲明,而不只是一個或另一個。 –
@ValentinKuzub:爲什麼呢?我基本上將兩個Manger類合併爲一個。如果沒有這個,將會有兩個類SoccerManager和FootballManger,每個都有一個方法GetInstance。如果檢查T的類型被認爲是不好的編碼,那麼泛型類的目的是相當有限的,你不覺得嗎? – bobbyalex
你認爲'List'是有限的嗎?它是否需要檢查'T'的類型來完成它的工作?泛型類的意義在於,只要T符合通用類的約束,類的方法的實現就可以保持,而不管T的類型如何。在你的情況下,'GetManager'的實現取決於'T'的類型。如果你真的是RY,你只能違反DRY。 –