我有一個接口變量IAction nextAction。C#:我如何確定接口變量的類型?
我想看看下個動作是具體落實,但沒有成功,當我嘗試以下:我如何能確定具體類型的IAction變量個動作的
IAction nextAction = GetNextAction();
if (nextAction.GetType() != typeof(LastAction)) {
// do something...
}
什麼想法?
我有一個接口變量IAction nextAction。C#:我如何確定接口變量的類型?
我想看看下個動作是具體落實,但沒有成功,當我嘗試以下:我如何能確定具體類型的IAction變量個動作的
IAction nextAction = GetNextAction();
if (nextAction.GetType() != typeof(LastAction)) {
// do something...
}
什麼想法?
我相信「是」是你在找什麼。一般來說:
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。
您可以使用使用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?
@jamietre請使用最新的更新重新閱讀文章 – 2012-07-28 02:32:09
nextAction.GetType()
會給你具體類型的對象。
但是,這不是很好的設計,接口的一點是您只使用接口中可用的共享功能。
如果需要未涵蓋的接口,那麼你應該聲明你需要的類型的變量,並用它來完成的功能。
你的意思'typeof'? – Zong 2012-07-28 02:25:05
但'nextAction.GetType()'*已經*回報 「的具體類型的」'nextAction'變量。 – 2012-07-28 02:33:10