سؤال

هل هناك طريقة للقيام بما يلي؟ أنا يرى أن وسيطات السمة يجب أن تكون تعبيرا ثابتا، فكيف سأعمل حول هذا؟ إذا كنت لا أريد التحميل بعض العقارات في DataGridView باستخدام ملزمة، ما هو أفضل البديل التالي؟

  class TestObj
  {
     private bool isBrowsable = false;

     [Browsable(isBrowsable)]
     public string String1
     {
        get
        {
           return "Foo";
        }
     }
     [Browsable(isBrowsable)]
     public string String2
     {
        get
        {
           return "Baz";
        }
     }
  }
هل كانت مفيدة؟

المحلول

يمكنك تقديم معلومات نوع مخصص ديناميكي في وقت التشغيل عن طريق تنفيذ Isustomypedescripttor. واجهة - ولكن هذا جزء كبير من العمل ليس بسيطة تقريبا مثل تزيين الخصائص مع السمات.

نصائح أخرى

لأوقات التشغيل، أعتقد أنك ربما تبحث في Icustomypedescriptor. إذا كان قرار تجميع تجميع، فيمكنك استخدام توجيهات المحول البرمجي:


 #define ISBROWSABLE
 #if ISBROWSABLE
 [your attribute]
 #endif

يمكنك تحميل القيمة من بعض ملف التكوين أو قاعدة البيانات باستخدام نهج مشابه لكيفية تعيين القيمة الديناميكية في سمة بلدي عن طريق تمرير أسماء الطبقة والممتلكات، على سبيل المثال

iSBrowsable ("Classname"، "اسم الملكية")

ومع ذلك، سيكون من الإزعاج من الكتابة كأسماء سلسلة، والتي تكون واضحة ويجب أن تكون قادرة على تحديدها من الانعكاس. يمكنك محاولة استخدام أدوات iL Weaver، مثل Postsharp أو Fody. (أعتقد، أنهم قادرون على القيام به مثل هذا التفكير، ولكن ليس لديهم مثال فقط الآن) ☑

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