0

我有一个名为“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# 知识使其令人困惑。

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

4

3 回答 3

5

只需将它们作为第二个参数传入即可。

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

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

于 2013-03-25T12:01:39.283 回答
3

尝试这个:

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

class Program {
    static void Main(string[] args) {
        var createMe = Activator.CreateInstance(typeof(CreateMe), new object[] { args });
    }
}
于 2013-03-25T12:01:22.887 回答
1
IFile file = (IFile)Activator.CreateInstance(Type.GetType("FileParser.File" + args[0]), new object[]{args});
于 2013-03-25T12:05:51.543 回答