0

const 名と execute という仮想メソッドを持つ親クラス Command があります。どちらも子によって上書きされます。コマンドのリストを受け取り、変更された可能性のあるコマンドのリストを返すメソッドがあります。

入力コマンド リストを変更する必要があるかどうかを判断するには、このリストを変更する前に、リスト内の各コマンドの種類を知る必要があります。ただし、問題は、親と同じ名前の派生クラスの静的メンバーを作成するために new キーワードを使用する必要があることですが、コマンドの名前を静的に参照できるようにしたいと考えています。

私がやろうとしていることの例:

public List<Command> ReplacementEffect(List<Command> exChain)
{
    for(int index = 0; index < exChain.Count; index++)
    {
         if(exChain[index].Name == StaticReference.Name)
         {
             //Modify exChain here
         }
    }
    return exChain;
}

exChain[index].GetType() を使用する際の問題は、そのタイプの別のオブジェクトをインスタンス化して、どれが無駄で、時間がかかり、直感的でないかを確認する必要があることです。また、Name から const 修飾子を削除する必要があります。

編集:

class Command
{
    public const string Name = "Null";

    public virtual void Execute()
    {
        //Basic implementation
    }
}

class StaticReference : Command
{
    public new const string Name = "StaticRef";

    public override void Execute()
    {
        //New implementation
    }
}
4

1 に答える 1

0

exChain[index].GetType() == typeof(StaticReference)派生クラスが両方とも型であるために型比較を実際に使用できないが、(例には示されていませんが、そうでない場合は代わりに型比較を使用して) 区別したい場合は、静的を使用できますStaticReferenceName名前のプロパティですが、仮想アクセサーを介してアクセスします。

class Command
{
    public const string Name = "Null";

    public virtual string CommandName
    {
        get
        {
            return Name;
        }
    }
}

class StaticReference : Command
{
    public new const string Name = "StaticRef";

    public virtual string CommandName
    {
        get
        {
            return Name;
        }
    }
}

使用法:

     if(exChain[index].CommandName == StaticReference.Name)
     {
         //Modify exChain here
     }
于 2013-03-30T01:44:20.040 に答える