我有一个接口变量IAction nextAction。
我想看看nextAction是否具体实现,但是当我尝试以下操作时失败:
IAction nextAction = GetNextAction();
if (nextAction.GetType() != typeof(LastAction)) {
// do something...
}
关于如何确定IAction变量nextAction的具体类型的任何想法?
答案 0 :(得分:5)
我相信“是”就是你要找的东西。一般来说:
if (nextAction is ButtonClickedAction) {
...
}
在第二次检查时,看起来您正试图查看操作是否已更改
private void DetermineIfActionChanged(IAction lastAction)
{
IAction nextAction = GetNextAction();
if (nextAction.GetType() != lastAction.GetType())
{
DoSomethingAwesome();
}
}
这种方法的唯一问题是,如果你有某种类型的继承你想要尊重并且你并不关心完全匹配(例如,自从ClickAventArg派生自EventArg以来,EventArg与ClickEventArg都被认为是相同的类型) 。如果是这种情况this SO answer might be of some help。
答案 1 :(得分:2)
您可以使用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
运算符可以用于接口,它也尊重继承。阅读:What is the difference between typeof and the is keyword?
答案 2 :(得分:2)
nextAction.GetType()
将为您提供具体的对象类型。
然而,这不是很好的设计,接口的一点是你只使用界面中可用的共享功能。
如果您需要界面未涵盖的功能,那么您应该声明所需类型的变量并完成它。