我正在尝试这样做,但我不知道怎么样,我有点失落
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
我怎么能做到这一点?
更新:如果我解释一下我要存档的内容,我认为会更好。当我将类名作为参数传递时,我正在尝试将类调用为方法。
答案 0 :(得分:3)
我认为您可能遇到一些常规设计问题,但编译错误是由于缺少括号。
return ((Commands)type).execute(cmdParams);
Dot比存在更高的存在(发生在之前)。
完整报价如下:
return (Commands)(type.execute(cmdParams));
由于找不到execute
的内容,因此无法找到type
。
另请注意,您可能希望了解查看类型名称的原因,as
和is
更安全,更易于实施。
var command = type as Commands;
if (command != null)
{
return command.execute(cmdParams);
}
else
{
//Command not found!
return 1;
}
答案 1 :(得分:2)
在尝试拨打execute
:
return ((Commands)type).execute(cmdParams);
你编写它的方式是,它试图在未转换的类型上调用execute
,然后将结果转换为Commands
。
答案 2 :(得分:2)
您似乎有一组 types ,您尝试将其用作实例。您需要一个类型的实例来调用非静态方法,这可以通过强制转换或反射来完成。
如果您想创建该类型的实例,请使用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;
}
}