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

时间:2013-03-25 11:55:40

标签: c#

我有一个名为'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.CreateInstance创建FileAutoSys的实例,但是我在将args传递给它的构造函数时遇到了问题。

我可以创建一个实例并使用两步程序设置其状态:

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

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

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

Activator.CreateInstance(Type, Object[])

但是,没有用,它没有给出任何例子,而且我缺乏C#知识让人感到困惑。

我希望有人可以向我解释如何在我的例子中使用上述重载。我并不是要求有人为我做这件事,因为我想了解我应该做些什么。

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:3)

试试这个:

class CreateMe {
    public CreateMe(ref string[] args) {
    }
}

class Program {
    static void Main(string[] args) {
        var createMe = Activator.CreateInstance(typeof(CreateMe), new object[] { args });
    }
}

答案 2 :(得分:1)

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