簡體   English   中英

泛型類型定義子類型不反映這樣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM