0

私はこのようなことをしようとしていますが、方法がわからず、ちょっと迷っています

    foreach ( var type in cmdTypes )
    {
        if ( type.Name.ToLowerInvariant() == Name.ToLowerInvariant() )
        {
            return (Commands)type.execute(cmdParams);//<==Incorrect

        }
        else
        {
            //Command not found!
            return 1;
        }
    }

このクラスは の派生クラスですCommands。これは基本クラスです:

abstract class Commands
{
    internal abstract int execute(object[] myParameters );

    internal string Name;

    public Commands()
    {
        Name=this.GetType().Name;
    }
}

execute()から派生したすべてのクラスを呼び出せるようにしたいのですが、Commands これを達成するにはどうすればよいですか?

更新:アーカイブしたいものを説明したほうがよいと思います。クラス名をパラメーターとして渡すときに、クラスにメソッドを呼び出させようとしています。

4

3 に答える 3

2

インスタンスとして使用しようとしているのコレクションがあるようです。非静的メソッドを呼び出すには、型のインスタンスが必要です。これは、キャストまたはリフレクションによって実行できます。

タイプからインスタンスを作成Activator.CreateInstanceする場合は、次を使用します。

foreach ( var type in cmdTypes )
{
    if ( type.Name.ToLowerInvariant() == Name.ToLowerInvariant() )
    {
        Command cmd = Activator.CreateInstance(type) as Command;
        if(cmd != null)  // cmd is a Command!
            return cmd.execute(cmdParams);
        else
            // what should you do?
    }
    else
    {
        //Command not found!
        return 1;
    }
}
于 2013-08-19T22:17:17.393 に答える