>辨識來自.net
>物件時。 當基底類別是通用的時,標準Type
的方法不夠。 IsSubclassOf
>
挑戰:
考慮此範例:
<code class="language-csharp">public class GenericClass<T> : IGenericInterface<T> { } public class TestClass : GenericClass<string> { }</code>
>是因為typeof(TestClass).IsSubclassOf(typeof(GenericClass<string>))
是一種封閉的通用類型,而不是通用類型的定義。
typeof(GenericClass<string>)
以下輔助函數有效地決定類型是否從
raw的通用型別定義:>
此函數透過<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type genericType, Type toCheck) { while (toCheck != null && toCheck != typeof(object)) { Type currentType = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck; if (genericType == currentType) { return true; } toCheck = toCheck.BaseType; } return false; }</code>
來獲得通用類型定義。 然後,該功能將此原始的通用類型定義與提供的toCheck
進行比較。 一場比賽證實了從原始通用類型的繼承。 object
>
GetGenericTypeDefinition()
這種方法正確地識別了從通用類別中的繼承,在這種情況下克服了標準genericType
方法的局限性。 您可以使用此函數可靠地確定a
以上是如何確定類是否從.NET中的通用類繼承?的詳細內容。更多資訊請關注PHP中文網其他相關文章!