[英]Binding in Ninject - generic arguments provided doesn't equal the arity of the generic type definition?
[英]Generic type definition subtype doesn't reflect as such
給定
public class Generic<T> {}
public class SubGeneric<T> : Generic<T> {}
以下都是錯誤的:
typeof(Generic<>).IsAssignableFrom(typeof(SubGeneric<>));
typeof(SubGeneric<>).IsSubclassOf(typeof(Generic<>));
typeof(SubGeneric<>).BaseType.Equals(typeof(Generic<>));
第一個是有道理的(直到具體它們不可分配)。 但是為什么對另外兩個有這種行為呢?
SubGeneric<T>
繼承Generic<T>
,而不是Generic<>
如果它繼承了Generic<>
,它將無法傳達足夠的信息。
考慮之間的區別
class Wierd<T1, T2> : Generic<T1> { }
和
class Wierd<T1, T2> : Generic<T2> { }
甚至
class Wierd<T1, T2> : Generic<Wierd<T2, T1>> { }
BaseType
包括基本類型的特定參數化。
typeof(SubGeneric<>).BaseType.GetGenericArguments()
將返回一個包含SubGeneric<>
的泛型類型參數 ( <T>
) 的數組。
typeof(SubGeneric<>).BaseType.GetGenericTypeDefinition() == typeof(Generic<>);
應該是真的。
我認為這些斷言在給出T
之前是沒有意義的。
SubGeneric<T>
是Generic<T>
的子類,但SubGeneric<>
和Generic<>
(沒有任何T
)根本不是類,不能相互派生,或者這可能意味着任何SubGeneric<U>
可以是Generic<V>
的子類,這顯然是不正確的。
我認為這與通用參數有關。
SubGeneric<string>
不是Generic<int>
的子類
因此,在不了解泛型參數的情況下,無法做出推斷。
typeof(SubGeneric<int>).IsSubclassOf(typeof(Generic<int>));
typeof(SubGeneric<string>).BaseType.Equals(typeof(Generic<string>));
應該返回true
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.