将自定义属性添加到系统类

时间:2011-09-30 07:34:56

标签: reflection types attributes reflection.emit

我想从System.Activites.Presentation我的自定义属性添加类。我尝试用emit(TypeBuilder, ModuleBuilder, AssemblyBuilder)来做。是否可以通过向其添加属性来更改现有类型?或者如何告诉TypeBuilder,以便它使用现有的数据类型?或者从给定类型继承? 谢谢。

1 个答案:

答案 0 :(得分:2)

您无法向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;
    }


}