[英]GetType and typeof
Type typeThing = gumballMachine.GetState().GetType();
if (typeThing == typeof(NoQuarterState)) { ... }
IState state;
public IState GetState() {
return state;
}
public class NoQuarterState : IState { ... }
我正在使用Head First Design Patterns第10章中的gumballMachine應用程序。 完整代碼在這里 。
問題:類型上面有氣味! 有沒有更好的辦法?
您可以使用is
運算符 :
if(gumballMachine.GetState() is NoQuarterState)
{
//..
}
當然,這對於所有繼承自NoQuarterState
類型都NoQuarterState
true
。 根據您的示例,這應該不成問題。
問題是,為什么首先要按類型區分? 通常,這表明有更好的設計是有序的,即策略模式或多態性的其他使用可能會有所幫助。
如果可以修改GumballMachine類,則可以使用枚舉代替類型:
public enum StateEnum
{
NoQuarterState,
SomeOtherState
}
StateEnum GetState { get; }
if(gumballMachine.GetState.Equals(StateEnum.NoQuarterState)) { ... }
你可以試試
object typeThing = gumballMachine.GetState();
//1st way
if (typeThing is NoQuarterState) {...}
//Or 2nd way
if ((typeThing as NoQuarterState)!=null) {...}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.