Modifying Class Attribute on Runtime

前端 未结 3 1858
一整个雨季
一整个雨季 2021-01-18 00:11

I am not sure if it is possible I have seen:
Change Attribute\'s parameter at runtime.
My case is very similar but I am trying to change the attribute of a class in

3条回答
  •  [愿得一人]
    2021-01-18 00:43

    If you use reflection, then not quite like this - reflection attributes can't be substituted - only the component-model view is impacted by TypeDescriptor. However, you can subclass CategoryAttribute to your purposes. Especially useful for i18n.

    using System.ComponentModel;
    using System;
    [MyCategory("Fred")]
    class Foo {  }
    static class Program
    {
        static void Main()
        {
            var ca = (CategoryAttribute)Attribute.GetCustomAttribute(typeof(Foo), typeof(CategoryAttribute));
            Console.WriteLine(ca.Category);
                  // ^^^ writes "I was Fred, but not I'm EVIL Fred"
        }
    }
    class MyCategoryAttribute : CategoryAttribute
    {
        public MyCategoryAttribute(string category) : base(category) { }
        protected override string GetLocalizedString(string value)
        {
            return "I was " + value + ", but not I'm EVIL " + value;
        }
    }
    

提交回复
热议问题