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