Gra*_*ush 1 c# reflection system.reflection
我一直在试验一个将扫描程序集的应用程序,检查任何表单类,然后查看它们的成员.
我用来查询程序集的代码是:
Assembly testAssembly = Assembly.LoadFile(assemblyPath);
Type[] types = testAssembly.GetTypes();
textBox1.Text = "";
foreach (Type type in types)
{
if (type.Name.StartsWith("Form"))
{
textBox1.Text += type.Name + Environment.NewLine;
Type formType = testAssembly.GetType();
Object form = Activator.CreateInstance(formType);
}
}
Run Code Online (Sandbox Code Playgroud)
我用它来查询标准表单:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace TestForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当代码尝试时,Activator.CreateInstance(formType)我得到一个异常说明:"No parameterless constructor defined for this object."
我也可以通过检查formType看到'DeclaringMethod:'formType.DeclaringMethod'引发类型'System.InvalidOperationException'的异常
我不明白错误信息,因为表单有一个标准的构造函数,我错过了一些非常明显的东西吗?
编辑:type.Name显示代码尝试实例化的类型Form1.
您正在尝试创建Assembly的实例,而不是您的表单:
Type formType = testAssembly.GetType();
Object form = Activator.CreateInstance(formType);
Run Code Online (Sandbox Code Playgroud)
你应该做:
Object form = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我不会使用类的名称来检查它是否派生自Form,你可以使用IsSubclassOf:
type.IsSubclassOf(typeof(Form));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1707 次 |
| 最近记录: |