首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时传递一个类名(而不是实例化对象)作为方法参数

在运行时传递一个类名(而不是实例化对象)作为方法参数
EN

Stack Overflow用户
提问于 2021-01-21 03:45:01
回答 1查看 35关注 0票数 0

不知道这是否可能,但我需要将一个类名(几百个类名中的一个)作为参数传递给方法。每个类都是包含我正在填充的字段的表单。我在一个名为Forms的公共类中使用了通用方法。我想要做的是将(表单的)类名传递给Forms类中的一个方法,该方法然后实例化,然后调用AddData()方法(它向表单添加数据)。我发现的所有内容都谈到了Activator.CreateInstance(Type ),但是它返回一个不能调用AddData()方法的Type。

工艺流程:

  1. Call FillForm.AutoFill()从UI调用所选表单(类名)。
  2. Call Form.AddData()实例化表单并传递从SQL和UI窗体字段检索的数据。
  3. 将完成的表单返回给UI.

我想做的是,当表单在UI (SQL of forms)上被选中时,它将类名传递给FillForm,它执行如下操作:

代码语言:javascript
复制
var form = new Form<T>()
var fdata = await form.AddData(GetSqlData(user), inputData)
//AddData uses the appropriate form class
SaveDocument(fdata); 

但我不知道如何以形式实施。

我真的不想使用开关语句,因为它可能有多达600种情况,而且是不可扩展的。

任何想法都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-01-21 04:22:20

给出了以下两种模式。

  1. 使用AddData方法.

创建接口。

代码语言:javascript
复制
public interface IGoodForm
{
    DataTable AddData(DataTable sqlData, DataTable inputData);
}

在每个表单上实现IGoodForm接口。

代码语言:javascript
复制
 public partial class GoodForm : Form, IGoodForm
{
    ~~~

    public DataTable AddData(DataTable sqlData, DataTable inputData)
    {
        var result = new DataTable();

        return result;
    }
    
    ~~~
}

调用以下进程。

代码语言:javascript
复制
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);

不需要任何接口,并调用以下处理。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65820889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档