0

インターフェイス「IFile」に準拠するクラス「FileAutoSys」を含む「FileParser」というアセンブリがあります。

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のインスタンスを作成しようとしていますが、コンストラクターに引数を渡す際に問題が発生します。

2段階の手順を使用して、インスタンスを作成し、その状態を設定できます。

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

ここで、args[0]は文字列「AutoSys」です。

しかし、私はそれをすべて1つのステップで行う方法がわかりません。私はグーグルで検索しましたが、それがどのように行われたかについての明確な例を見つけることができません。MSDNは、オーバーロードを使用することを提案しています。

Activator.CreateInstance(Type, Object[])

しかし、役に立たないことに、それは例を示しておらず、C#の知識が不足しているために混乱を招きます。

私の例の文脈で上記の過負荷をどのように使用すべきかを誰かが私に説明してくれることを望んでいました。私は自分が何をすべきかを理解したいので、誰かにそれをしてくれるように頼んでいるのではありません。

4

3 に答える 3

5

それらを2番目の引数として渡すだけです。

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

編集:これは期待されるパラメータタイプであり、の引数タイプであるため、配列の2番目の引数をラップしました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 に答える