2012-07-28 28 views
1

我有一個接口變量IAction nextAction。C#:我如何確定接口變量的類型?

我想看看下個動作是具體落實,但沒有成功,當我嘗試以下:我如何能確定具體類型的IAction變量個動作的

IAction nextAction = GetNextAction(); 

if (nextAction.GetType() != typeof(LastAction)) { 
// do something... 
} 

什麼想法?

+1

你的意思'typeof'? – Zong 2012-07-28 02:25:05

+1

但'nextAction.GetType()'*已經*回報 「的具體類型的」'nextAction'變量。 – 2012-07-28 02:33:10

回答

5

我相信「是」是你在找什麼。一般來說:

if (nextAction is ButtonClickedAction) { 
    ... 
} 

在第二次檢查,它看起來像你想看到這一行爲是否改變

private void DetermineIfActionChanged(IAction lastAction) 
{ 
    IAction nextAction = GetNextAction(); 
    if (nextAction.GetType() != lastAction.GetType()) 
    { 
     DoSomethingAwesome(); 
    } 
} 

唯一的問題,這種方法是,如果你有某種繼承的那你想尊重你,並且你不關心完全匹配(例如,自從ClickEventArg派生自EventArg之後,EventArg與ClickEventArg都將被視爲相同的類型)。如果是這種情況this SO answer might be of some help

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?

+0

@jamietre請使用最新的更新重新閱讀文章 – 2012-07-28 02:32:09

2

nextAction.GetType()會給你具體類型的對象。

但是,這不是很好的設計,接口的一點是您只使用接口中可用的共享功能。

如果需要未涵蓋的接口,那麼你應該聲明你需要的類型的變量,並用它來完成的功能。