سؤال

النظر في التعليمات البرمجية التالية.

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, اعتمادا على السياق.

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