将参数和字符串传递给Activator.CreateInstance

本文关键字:Activator CreateInstance 参数 字符串 | 更新日期: 2023-09-27 18:05:35

我有一个名为'FileParser'的程序集,其中包含符合接口'IFile'的类'FileAutoSys'。

namespace FileParser
{
    class FileAutoSys : IFile
    {
        public FileAutoSys(ref string[] args)
        {
            ...
        }
        public FileAutoSys(){}
        public void SetValues(ref string[] args)
        {
            *[same code as in the non-default constructor]*
        }
}

我正在尝试使用Activator创建FileAutoSys的实例。创建实例,但我有问题传递参数到它的构造函数。

我可以创建一个实例并使用两个步骤设置它的状态:

IFile file = (IFile)Activator.CreateInstance(Type.GetType("FileParser.File" + args[0]));
file.SetValues(ref args);

其中args[0]是字符串'AutoSys'。

但是我不知道如何一步完成这一切。我在谷歌上搜索过,但我找不到任何明确的例子来说明它是如何做到的。MSDN建议我使用重载:

Activator.CreateInstance(Type, Object[])

但是,它没有给出任何例子,而且我缺乏c#知识,这使它令人困惑。

我希望有人能给我解释一下,我应该如何在我的例子中使用上面提到的重载。我不是要求别人帮我做,因为我想知道我应该做什么。

将参数和字符串传递给Activator.CreateInstance

将它们作为第二个参数传入。

IFile file = (IFile)Activator.CreateInstance(
    Type.GetType("FileParser.File" + args[0]), new object[] { args });

编辑:在数组中包装第二个参数,因为这是预期的参数类型,以及Activator.CreateInstance的参数类型,我认为这就是为什么它令人困惑的原因。

试试这个:

class CreateMe {
    public CreateMe(ref string[] args) {
    }
}
class Program {
    static void Main(string[] args) {
        var createMe = Activator.CreateInstance(typeof(CreateMe), new object[] { args });
    }
}
IFile file = (IFile)Activator.CreateInstance(Type.GetType("FileParser.File" + args[0]), new object[]{args});