我有一个控件...任何System.Windows.Forms.Control.比如说.标签.
我希望找到名为"Enabled"的属性的默认值(可以是任何属性).我该怎么做?
1)在这种情况下,我们有一个标签.标签的"已启用"属性的默认值为true.
2)现在在运行时,假设我想找出属性"Enabled"的默认值是什么...我该如何找到?
3)首先,我有一个控制对象.从该对象,我只能获取属性"Enabled"的当前值,但不能获取DEFAULT值.
解决这个问题的一种可能方法是:
1)在运行时识别控件的类型.2)使用其默认构造函数初始化它.3)找到我们感兴趣的属性的值(它显然是默认值)并且那里......我们有默认值.
但是,在这种情况下......我不知道我的控制权.我所知道的是,它可以是System.Windows.Forms.Control的任何控件.那么我如何初始化它并得到它的对象呢?可能吗?
您有任何替代解决方案/更好的方法吗?
这是使用反思的好机会!这是一个方法,它应该获取具有默认构造函数(公共,无参数)的任何类型的任何属性的默认值:
public static object GetDefaultPropertyValue(Type type, string propertyName)
{
if (type.GetConstructor(new Type[] { }) == null)
throw new Exception(type + " doesn't have a default constructor, so there is no default instance to get a default property value from.");
var obj = Activator.CreateInstance(type);
return type.GetProperty(propertyName).GetValue(obj, new object[] { });
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用大量控件执行此操作,其中可能存在多个单一类型,则您可能需要缓存每种类型的结果,因为反射速度有些慢。
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |