111,120
社区成员
发帖
与我相关
我的任务
分享
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Button btn = ReflectionHelper.CreateControl<Button>();
}
}
/// 反射帮助类
/// </summary>
public static class ReflectionHelper
{
public static T CreateControl<T>()
{
Type o = typeof(T);
object obj = Activator.CreateInstance(o, true);//根据类型创建实例
return (T)obj;//类型转换并返回
}
/// <summary>
/// 创建对象实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="fullName">命名空间.类型名</param>
/// <param name="assemblyName">程序集</param>
/// <returns></returns>
public static T CreateInstance<T>(string fullName, string assemblyName)
{
string path = fullName + "," + assemblyName;//命名空间.类型名,程序集
Type o = Type.GetType(path);//加载类型
object obj = Activator.CreateInstance(o, true);//根据类型创建实例
return (T)obj;//类型转换并返回
}
/// <summary>
/// 创建对象实例
/// </summary>
/// <typeparam name="T">要创建对象的类型</typeparam>
/// <param name="assemblyName">类型所在程序集名称</param>
/// <param name="nameSpace">类型所在命名空间</param>
/// <param name="className">类型名</param>
/// <returns></returns>
public static T CreateInstance<T>(string assemblyName, string nameSpace, string className)
{
try
{
string fullName = nameSpace + "." + className;//命名空间.类型名
//此为第一种写法
object ect = Assembly.Load(assemblyName).CreateInstance(fullName);//加载程序集,创建程序集里面的 命名空间.类型名 实例
return (T)ect;//类型转换并返回
}
catch
{
//发生异常,返回类型的默认值
return default(T);
}
}
}
[/quote]
才用一周,那就老老实实的new吧, 可读性强, 你这动态取,看似挺厉害,等你过几个月,自己都蒙逼.[/quote]
只是测试代码,后面在数据字典表里面设置控件的类型及其他信息
[/quote]
要只是测试一下,不是用在生产,那就用返映射吧,通过全名,或者类型,都能返映射出来[/quote]
有返映射的案例地址吗?我没找到
[/quote]
才用一周,那就老老实实的new吧, 可读性强, 你这动态取,看似挺厉害,等你过几个月,自己都蒙逼.[/quote]
只是测试代码,后面在数据字典表里面设置控件的类型及其他信息
[/quote]
要只是测试一下,不是用在生产,那就用返映射吧,通过全名,或者类型,都能返映射出来
[/quote]
才用一周,那就老老实实的new吧, 可读性强, 你这动态取,看似挺厉害,等你过几个月,自己都蒙逼.[/quote]
只是测试代码,后面在数据字典表里面设置控件的类型及其他信息
[/quote]
才用一周,那就老老实实的new吧, 可读性强, 你这动态取,看似挺厉害,等你过几个月,自己都蒙逼.

