将参数和字符串传递给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#知识,这使它令人困惑。
我希望有人能给我解释一下,我应该如何在我的例子中使用上面提到的重载。我不是要求别人帮我做,因为我想知道我应该做什么。
将它们作为第二个参数传入。
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});