我需要在运行时向某个属性添加一个属性(用于设计时)。我知道我可以为课程做这件事:
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:)
答案 0 :(得分:0)
您无法动态添加或删除属性。请注意,TypeDescriptor实际上并没有向类添加属性:如果在使用MyRuntimeAttribute附加属性后检查typeof(MyType).GetCustomAttributes(false)
返回的数组,您会注意到它不属于它。
由于您提到设计时,您可以做的是动态修改属性。那是你真正想做的吗?
另见:
答案 1 :(得分:0)
您还可以提供控件设计器,您可以在该设计器中覆盖PreFilterProperties。虽然这通常用于隐藏属性,但它也可用于添加属性。
http://www.codeproject.com/KB/webforms/HidingProperties.aspx