跳转到内容

BOO大全/列举

维基教科书,自由的教学读本

上一章:界面 目录 下一章:值型别


列举

[编辑]

有时候我们会需要一组常数来描述状态。举例来说,电视可能是关着的、开着的或者是在休眠状态。当然,你知道更好的方法是使用常数来取代 Magic number

class TvState:
	static final Off = 0
	static final On = 1
	static final Standby = 2

这是个好方法,只是要打太多字了。列举(Enumeration的缩写:Enum)会是个更适合的方法,它建立了一个新的型别,里面有特定值的定义。

enum TvState:
	Off
	On
	Standby

state = TvState.Off
print "state was",state

输出结果

state was Off

列举值知道如何适当的表达自己,这也是你看到 "Off" 的原因。你也可以从字串转回列举值,方法是使用 Enum.Parse,如果字串并不是列举所定义的其中一个值,那么将会提出例外。

>>> import System
>>> t = Enum.Parse(TvState,"Off")
Off
>>> t.GetType()
TvState

虽然列举用来定义型别而且可以放在类别外面,但他们通常还是被放在类别里面,因为大多情况下这些特定的列举值由于用途的关系,只适用在类别里。

class TvController:
	enum TvState:
		Off
		On
		Standby
		
	[property(State)]
	_state as TvState

	def ResetState(state as TvState):
	...

除了上面所提到的好处之外,另外一个好处是列举本身就已经描述值的用途。举例来说,如果使用 def ResetState( state as int ),我们无法得知 state 的整数值应该是什么,我们必须依靠注解才有可能得知其正确值为何。


上一章:界面 目录 下一章:值型别