在运行时为属性添加属性(用于设计时)

时间:2010-07-12 17:57:43

标签: c# .net

我需要在运行时向某个属性添加一个属性(用于设计时)。我知道我可以为课程做这件事:

TypeDescriptor.AddAttributes(typeof(MyType), new MyRuntimeAttribute());

但是我找不到任何办法对属性做同样的事情。

有什么建议吗?

UPD:确切的任务是:

public class BaseClass {
  public BaseClass(string name) { Name = name; }
  public Name { get; set; }
}
public class Descendant1: BaseClass {
  public Descendant1() : base("Default Name 1") { }
}
...
public class DescendantN: BaseClass {
  public DescendantN() : base("Default Name N") { }
}

我希望每个后代在Name属性中拥有每个自己的DefaultValueAttribute,并带有相应的默认名称。而且我不想在每次下降时硬编码DefaultValueAttribute:)

2 个答案:

答案 0 :(得分:0)

您无法动态添加或删除属性。请注意,TypeDescriptor实际上并没有向类添加属性:如果在使用MyRuntimeAttribute附加属性后检查typeof(MyType).GetCustomAttributes(false)返回的数组,您会注意到它不属于它。

由于您提到设计时,您可以做的是动态修改属性。那是你真正想做的吗?

另见:

答案 1 :(得分:0)

您还可以提供控件设计器,您可以在该设计器中覆盖PreFilterProperties。虽然这通常用于隐藏属性,但它也可用于添加属性。

http://www.codeproject.com/KB/webforms/HidingProperties.aspx