簡體   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