TypeDescriptor.GetProperties() vs نوع.GetProperties()
-
05-07-2019 - |
سؤال
النظر في التعليمات البرمجية التالية.
Object obj;
PropertyDescriptorCollection A = TypeDescriptor.GetProperties(obj);
PropertyInfo[] B = obj.GetType().GetProperties(); // EDIT*
أنا أحاول أن أفهم الفرق بين A و B.من ما أفهم TypeDescriptor.GetProperties() سيعود مخصص TypeDescriptor خصائص ، حيث نوع.GetProperties() فقط عودة الجوهرية "الحقيقي" خصائص الكائن.هل هذا صحيح ؟ إذا الكائنات لا تملك أي مخصص TypeDescriptor خصائص ثم انها مجرد افتراضات إلى العودة أيضا الحرفي الجوهرية خصائص الكائن.
* الأصل السطر الثاني من التعليمات البرمجية قبل تحرير (كان الخطأ إرجاع القيمة):
PropertyDescriptorCollection ب = obj.GetType().GetProperties();
المحلول
obj.GetType().GetProperties()
لا عودة PropertyDescriptorCollection
, بإرجاع System.Reflection.PropertyInfo[]
.على PropertyInfo
فئة ، كما توحي لك ، تمثل سوى الفعلية الخصائص التي تم إنشاؤها على الكائن.A PropertyDescriptor
إما مخصص ملموسة الطفل من PropertyDescriptor
فئة (تنفذه اكتب تعريف مخصص واصف) ، أو مثيل مختومة الطبقة الداخلية ReflectPropertyDescriptor
يستخدم PropertyInfo
الفئة لتوفير ديناميكية الاحتجاج من مكان الإقامة.
حتى الفئة التي لا تعرف مخصص واصف ، سوف وظيفيا الحصول على نفس الأشياء مرة أخرى ، على الرغم من PropertyDescriptor
هو التلخيص بعيدا PropertyInfo
.
نصائح أخرى
على TypeDescriptor
يستخدم فئة في المصممين ، بحيث يمكن أن تتفاعل مع تصميم بيئة وقت.ولا سيما المصممين يمكن تجاوز وتوسيع ميزات مختلفة من TypeDescriptor
, ولكن ليس Type
.
أحد الأمثلة الجيدة على العمل مع عناصر تحكم ربط البيانات.على DataSource
الخاصية هي من نوع System.Object
, بعد وقت التصميم ، وهذا العقار هو استبدال العقار الجديد يحتوي على أكثر ثراء وقت التصميم واجهة المستخدم.
على TypeDescriptor
عوائد فئة PropertyDescriptor
الكائنات التي تمثل الخصائص في نوع من obj
فضلا عن أي من الخصائص الأخرى التي ساهمت في الكائن نفسه أو نوعه.
المكون النموذج هو في الواقع معقدة جدا, ولكن كما ذكرت الأساسية تنفيذ TypeDescriptor.GetProperties()
سيعود ReflectPropertyDescriptor
الحالات التي تمثل المراوغة إلى نموذجية PropertyInfo
الكائنات.يمكنك استخدام PropertyDescriptor
الكائنات كثيرا مثل PropertyInfo
الكائنات:أنها يمكن أن تستخدم للحصول على مجموعة قيمة العقار و لديهم الصفات.
بالنسبة DependencyObject
الحالات في برنامج الأغذية العالمي ، TypeDescriptor.GetProperties()
أيضا يعود الخصائص المرفقة.هذه PropertyDescriptor
الكائنات في هذه الحالة تقديم المراوغة إلى اعتماد نموذج كائن بدلا من التفكير.
في مكون مصمم, فمن الممكن استخدام ICustomTypeDescriptor
أو TypeDescriptionProviderAttribute
(وربما بعض التقنيات الأخرى) لخلق الخاصة بك PropertyDescriptor
الأشياء في وقت التشغيل أو في designtime.في أي حال ، فمن الممكن أن خصائص عاد من Type.GetProperties()
قد تختلف عن تلك التي عادت من TypeDescriptor
, اعتمادا على السياق.