繁体   English   中英

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

[英]Pass arguments as well as string into Activator.CreateInstance

我有一个名为“ 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'。

但是我不知道如何一步一步完成。 我已经在Google上搜索过,但找不到任何清楚的示例说明了它是如何完成的。 MSDN建议我使用重载:

Activator.CreateInstance(Type, Object[])

但是,无助地,它没有给出任何示例,而且由于我缺乏C#知识,因此令人困惑。

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

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

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});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM