我正在构建一个基于12个Usercontrol的动态Winforms UI,这些UI可以通过组合框选择并从抽象类派生(以提供统一的api)。
启动所有这些操作大约需要800毫秒(太慢而且无用,因为选择后只会使用一个)。但我必须让他们访问公共财产'描述'我在组合框中显示。
我想访问Property(field,const)static。但这对于接口或抽象类来说是不可能的。
我可以在Dictionay< type,string>中存储关系(UserControl< - > Description)。 但是'描述'属于对象。
是否有任何方式覆盖/继承可以通过接口/抽象类/ Reflection静态访问的公共静态函数/ poperty / field / attribute。所以我通过interface / abstract / Reflection类访问Usercontrol的描述而不实例化派生类?
答案 0 :(得分:1)
System.Attribute正是为此而设计的。
例如:
[System.ComponentModel.Description("This is my fantastic control!")]
public class MyControl : UserControl
{
//...
}
然后当你想得到这个值时:
public string GetDescription(Type t)
{
System.ComponentModel.DescriptionAttribute attrib = t.GetCustomAttribute<System.ComponentModel.DescriptionAttribute>();
if (attrib != null)
return attrib.Description;
return string.Empty;
}
并称之为:
string myDescription = GetDescription(typeof(MyControl));