سؤال

ما هو الفرق بين استخدام PropertyDescriptor التي ترجع قيمة ل IsReadOnly() الطريقة، وواحد مرتبط ب ReadOnlyAttribute?

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

المحلول

الفرق الرئيسي هو أن هذا يتيح لك الاستيلاء على مزيد من السيطرة إذا كنت تقدمك PropertyDescriptor التنفيذ (عبر ICustomTypeDescriptor, TypeDescriptionProvider أو TypeConverter). ثم يمكنك اختيار الخاص بك ملك منطق عندما يكون ذلك قابل للكتابة - على سبيل المثال، بناء على حقوق الوصول.

ولكن، نعم؛ ضمن التنفيذ الافتراضي، سيقوم بالإبلاغ عن القراءة فقط للحصول على خصائص دون setters، وللخصائص التي تحمل علامة ReadOnlyAttribute.

نصائح أخرى

لا فرق عندما أنظر إليها باستخدام العاكس.

أحد الفئة المشتقة من الفئة SympropertyDescriptor لديه التعليمات البرمجية التالية.


    public override bool IsReadOnly
    {
        get
        {
            return this.Attributes.Contains(ReadOnlyAttribute.Yes);
        }
    }

مجرد ملاحظة.

قضيت يوم تنفيذ ISUSTOMTYPORTICTOR في كائنات الكيان في طلبي، من أجل التحكم في الحالة للقراءة فقط لكل كيان بشكل فردي.

وبالتالي، احتفظ كل تطبيق في محاكاة الخصائص بالرجوع إلى كائن الكيان الذي جاء منه، وبالتالي كانت الممتلكات Isreadonly شيئا مثل هذا:

public override bool IsReadOnly
{
    get { return _owner.IsReadOnly;}
}

ومع ذلك، عندما صادف الرمز مكون BINDINGSORCE قراءة مجموعة من أسلوب VeryptionDescriptor S من GetProperties () طريقة ISUSTOMTYPTESCRIPTOR لكل سجل في المجموعة، عند فحص قيمة ISReadonly، اختبرت فقط خصائص PropertyDescriptor التي تم الحصول عليها من الأول سجل.

مضيعة للوقت!!!!

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