كيف يمكنك تحديد ما إذا كان نوع معين (نظام.نوع) يرث من الفئة الأساسية المحددة (في .صافي)?
-
02-07-2019 - |
سؤال
هذا هو الأرجح ستكون إجابة سهلة و أنا في عداد المفقودين شيء ، ولكن هنا يذهب...إذا كان لدي نوع (وهو الفعلي للنظام.نوع...لا مثيل) كيف يمكنني معرفة ما إذا كان يرث من آخر قاعدة محددة النوع ؟
المحلول
استخدام IsSubclassOf طريقة النظام.نوع فئة.
نصائح أخرى
شيء واحد لتوضيح بين Type.IsSubTypeOf()
و Type.IsAssignableFrom()
:
IsSubType()
سيعودtrue
إلا إذا كان نوع معين مشتق من النوع المحدد.فإنه سيعودfalse
إذا كان نوع معين هو النوع المحدد.IsAssignableFrom()
سيعودtrue
إذا كان نوع معين هو إما نوع محدد أو مشتقة من النوع المحدد.
حتى إذا كنت تستخدم هذه مقارنة BaseClass
و DerivedClass
(الذي يرث من BaseClass
) ثم:
BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
تحرير:علما أن الحل أعلاه سوف تفشل إذا كانت قاعدة اكتب كنت أبحث عنه هو واجهة.الحل التالي سوف تعمل على أي نوع من الميراث ، فئة أو واجهة.
// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
return baseType.IsAssignableFrom(type)
}
(شبه)مفيدة استخراج من MSDN المادة:
صحيح إذا كان [حجة] و نوع الحالي تمثل نفس النوع ، أو إذا كان من النوع الحالي في الميراث الهرمي [حجة] ، أو إذا كان من النوع الحالي هو واجهة [حجة] تنفذ ، أو إذا [حجة] هو نوع عام المعلمة الحالي يمثل نوع واحد من القيود [حجة].كاذبة إذا كان أي من هذه الشروط أو إذا [حجة] هو مرجع فارغة (لا شيء في Visual Basic).