不知道这是否可能,但我需要将一个类名(几百个类名中的一个)作为参数传递给方法。每个类都是包含我正在填充的字段的表单。我在一个名为Forms的公共类中使用了通用方法。我想要做的是将(表单的)类名传递给Forms类中的一个方法,该方法然后实例化,然后调用AddData()方法(它向表单添加数据)。我发现的所有内容都谈到了Activator.CreateInstance(Type ),但是它返回一个不能调用AddData()方法的Type。
工艺流程:
。
我想做的是,当表单在UI (SQL of forms)上被选中时,它将类名传递给FillForm,它执行如下操作:
var form = new Form<T>()
var fdata = await form.AddData(GetSqlData(user), inputData)
//AddData uses the appropriate form class
SaveDocument(fdata); 但我不知道如何以形式实施。
我真的不想使用开关语句,因为它可能有多达600种情况,而且是不可扩展的。
任何想法都将不胜感激。
发布于 2021-01-21 04:22:20
给出了以下两种模式。
创建接口。
public interface IGoodForm
{
DataTable AddData(DataTable sqlData, DataTable inputData);
}在每个表单上实现IGoodForm接口。
public partial class GoodForm : Form, IGoodForm
{
~~~
public DataTable AddData(DataTable sqlData, DataTable inputData)
{
var result = new DataTable();
return result;
}
~~~
}调用以下进程。
var dataTable = new DataTable();
var inputData = new DataTable();
var type1 = Type.GetType("Namespace.GoodForm");
var instance1 = Activator.CreateInstance(type1) as IGoodForm;
var result1 = instance1.AddData(dataTable, inputData);不需要任何接口,并调用以下处理。
var dataTable = new DataTable();
var inputData = new DataTable();
var type2 = Type.GetType("Namespace.GoodForm");
var instance2 = Activator.CreateInstance(type2);
var param2 = new object[] { dataTable, inputData };
var result2 = type2.GetMethod("AddData").Invoke(instance2, param2);https://stackoverflow.com/questions/65820889
复制相似问题