我有一个父类Command,它有一个const名称和一个名为execute的虚方法;两者都被孩子覆盖。我有一个方法,它接受一个命令列表并返回一个可能修改的命令列表。
要确定是否应更改输入命令列表,我需要在更改此列表之前知道列表中每个命令的类型。但问题是我必须使用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
}
}
答案 0 :(得分:0)
如果您确实无法使用类型比较exChain[index].GetType() == typeof(StaticReference)
,因为派生类都属于StaticReference
类型,但您希望通过Name
区分(未在您的示例中显示)但如果不是这种情况,请改用类型比较),您可以使用静态属性作为名称,但可以通过虚拟访问器访问它:
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
}