繁体   English   中英

GetType和typeof

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM