背景:
在日常开发中,我们容易遇到,针对某一个类型,设置对应的可修改的属性表控件. 几个还好,要是几十个.难道我们要提前设计几十个属性表吗? No!
需求:
自行设计: 可以对传入的对象:
1.自动提取其属性.并完成对该类型对应的基本元控件的创建.
2.在修改该对象属性的时候,属性表相对应的状态也随之改变.
3.在属性表的状态改变的时候, 该对象的状态随之改变
效果展示:
实现思路以及关键代码.
基本使用反射的知识.然后自定义特性
#endregion
/// <summary>
/// 设置类中的属性值
/// </summary>
/// <param name="FieldName"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static bool SetModelValue(string FieldName, string Value, object obj)
{
try
{
Type Ts = obj.GetType();
object v = Convert.ChangeType(Value, Ts.GetProperty(FieldName).PropertyType);
Ts.GetProperty(FieldName).SetValue(obj, v, null);
return true;
}
catch
{
return false;
}
}
/// 获取类中的属性值
/// </summary>
/// <param name="FieldName"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetModelValue(string FieldName, object obj)
{
try
{
Type Ts = obj.GetType();
object o = Ts.GetProperty(FieldName).GetValue(obj, null);
string Value = Convert.ToString(o);
if (string.IsNullOrEmpty(Value)) return null;
return Value;
}
catch
{
return null;
}
}
/// <summary>
/// 类型匹配
/// </summary>
/// <param name="type"></param>
/// <param name="typeName"></param>
/// <returns></returns>
public static bool IsType(Type type, string typeName)
{
if (type.ToString() == typeName)
return true;
if (type.ToString() == "System.Object")
return false;
return IsType(type.BaseType, typeName);
}
通过这个demo,加深了对反射这一强大功能的一些理解,以后的项目中,程序的易用性会大大提高.