Добавление пользовательского атрибута в системный класс - PullRequest
1 голос
/ 30 сентября 2011

Я хочу добавить классы из System.Activites.Presentation моего пользовательского атрибута.Я пытался сделать это с emit(TypeBuilder, ModuleBuilder, AssemblyBuilder).Можно ли изменить существующий тип, добавив к нему атрибут?Или как сказать TypeBuilder, чтобы он использовал существующий тип данных?Или наследовать от данного типа?Спасибо.

1 Ответ

2 голосов
/ 12 октября 2011

Вы не можете добавлять атрибуты к System классам, но, если они не помечены как Sealed, вы можете создать свой собственный класс, исходя из оригинала и добавив собственный атрибут.

Весь ваш код должен вызывать производный класс, который идентичен оригиналу, за исключением добавленного атрибута.

[MyAttribute(DisplayName="Name shown")]
public class MyActivity: System.Activities.Activity
{
}
/// <summary>
/// Custom attribute definition
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public sealed class MyAttribute : System.Attribute
{


    /// <summary>
    /// Defines the attribute
    /// </summary>
         public string DisplayName { get; set; }
    /// <summary>
    /// Allow access to the attribute
    /// </summary>
    /// <param name="prop"></param>
    /// <returns></returns>
      public static string GetDisplayName(System.Reflection.MemberInfo prop)
    {
        string field = null;
        object[] attr = prop.GetCustomAttributes(false);
        foreach (object a in attr)
        {
            MyAttribute additional = a as MyAttribute;
            if (additional != null)
            {
                field = additional.DisplayName;
            }
        }
        return field;
    }


}
...