在我的一個寵物項目中,我發現自己使用的泛型相當多,我想知道是否有可能在泛型類中使用遞歸約束。我可以使用遞歸約束來定義泛型類
讓我們想象一下,我有以下接口
public interface IAmSpecial {}
,並執行它可以按照各自的類來處理類
public class SpecialHandler<T> where T: IAmSpecial {}
我想定義一個類,在任何是通用SpecialHandler
public class SpecialWrapperHandler<T> where T : SpecialHandler<SpecialT> where SpecialT: IAmSpecial
{
public SpecialWrapperHandler(T t){}
}
它不能編譯。我可以定義SpecialWrapperHandler
類具有以下簽名
public class SpecialWrapperHandler<T> where T : SpecialHandler<IAmSpecial>
{
public SpecialWrapperHandler(T t){}
}
但我不能建立它,因爲任何SpecialHandler
實施將關閉在一個實施IAmSpecial
的一般價值。此外,我不能宣佈類似
public class SpecialWrapperHandler<SpecialHandler<T>> where T : IAmSpecial
所以是有可能有一個C#構造,遞歸泛型約束,所以我可以在我的SpecialWrapperHandler
?如果是的話,我應該使用什麼構造?如果不是,爲什麼?快速閱讀文檔中的generics chapter不會得到很多答案...
嘗試採取在2個通用參數。 – 2015-03-13 15:35:26