我有一个接口变量 IAction nextAction。
我想看看 nextAction 是否有一个具体的实现,但是当我尝试以下操作时没有成功:
IAction nextAction = GetNextAction();
if (nextAction.GetType() != typeof(LastAction)) {
// do something...
}
关于如何确定 IAction 变量 nextAction 的具体类型的任何想法?
我有一个接口变量 IAction nextAction。
我想看看 nextAction 是否有一个具体的实现,但是当我尝试以下操作时没有成功:
IAction nextAction = GetNextAction();
if (nextAction.GetType() != typeof(LastAction)) {
// do something...
}
关于如何确定 IAction 变量 nextAction 的具体类型的任何想法?
我相信“是”是您正在寻找的。一般来说:
if (nextAction is ButtonClickedAction) {
...
}
在第二次检查时,您似乎正在尝试查看操作是否已更改
private void DetermineIfActionChanged(IAction lastAction)
{
IAction nextAction = GetNextAction();
if (nextAction.GetType() != lastAction.GetType())
{
DoSomethingAwesome();
}
}
这种方法的唯一问题是,如果您有某种想要尊重的继承并且您不关心精确匹配(例如,EventArg 与 ClickEventArg 将被视为同一类型,因为 ClickEventArg 派生自 EventArg)。如果是这种情况,这个 SO answer 可能会有所帮助。
您可以使用使用typeof()
功能,也可以使用is
运算符。
typeof
:
IAction nextAction = GetNextAction();
if (nextAction.GetType() != typeof(LastAction)) {
// do something...
}
请记住,typeof
只有在类型完全相同时才会返回 true。
is
:
IAction nextAction = GetNextAction();
if (nextAction is LastAction) {
// do something...
}
但是你应该记住,is
操作符可以用于接口,它也尊重继承。阅读本文:typeof 和 is 关键字有什么区别?
nextAction.GetType()
会给你对象的具体类型。
但是,这不是很好的设计,界面的重点是您只使用界面中可用的共享功能。
如果您需要接口未涵盖的功能,那么您应该声明所需类型的变量并完成它。