كيف يمكنك تحديد ما إذا كان نوع معين (نظام.نوع) يرث من الفئة الأساسية المحددة (في .صافي)?

StackOverflow https://stackoverflow.com/questions/129277

سؤال

هذا هو الأرجح ستكون إجابة سهلة و أنا في عداد المفقودين شيء ، ولكن هنا يذهب...إذا كان لدي نوع (وهو الفعلي للنظام.نوع...لا مثيل) كيف يمكنني معرفة ما إذا كان يرث من آخر قاعدة محددة النوع ؟

هل كانت مفيدة؟

المحلول

استخدام 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).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top