变数介绍(part 2)
昨天介绍了「变数」、变数的「类型」,以及「宣告」、「初始化」分别代表的意义,相信大家对于变数已经有一定程度的了解。然而,变数的类型,除了最基本的 字元(char)、字串(string)、整数(int)、浮点数(double、float) 这几种以外,其实也能够依使用需求来自定义。
例如,在 Revit 中,最常见的类型 「Element」 ,就是 Revit API 自定义的类型,它代表的是 Revit 中的物件,每一个物件即是一个 Element。如果还是不太清楚 Element 是什么也不要慌张,等之后介绍到 LookUp 时,思路自然会清晰很多,现在只需要记得,除了最基本的几个变数类型以外,其实也能够自定义新的变数类型。
何谓清单(List)?
製作 Revit 外挂,其目的一定是要对 物件(Element) 做些什么事,可能是要移动物件、複製物件,又或者是要获取物件的某些参数。但无论要做何事,首先一定得获取要使用的物件,而要使用的物件经常不只一个,可能会是几十,甚至上百个。但是一个类型为 Element 的变数,只能储存一个物件,正如一个类型为整数的 x 变数 (int x),可以等于 1、等于 2,或等于任何整数,但它不可能同时等于 1 又等于 2。
这时候我们就会使用到 「清单(List)」,清单就像是一个容器,可以容纳多个变数。与变数相同,清单也需要被 “宣告”,并且放入的变数,其类型也必须与清单宣告的类型相同。而清单宣告的方式与变数一样,需要包含 “名称” 及 “变数类型”。以一个类型为 “整数”、名称为 “mylist” 的清单为例,宣告的方式便会是:
=> List < int > mylist;
其中,“List” 是在告诉程式,我们宣告的是一个清单,而非变数。而 “括弧<>” 内的文字是在告诉程式,这个清单将容纳的是,类型为整数的变数们。最后, “mylist” 则是在告诉程式,这个 “将要容纳整数们的清单” 的名称。
变数的宣告,除了是为变数命名,以及指定变数的类型之外,其实也是在告诉记忆体:「我将要储存一个值,麻烦你让出一个位置给我」。事实上,每个类型所佔用的记忆体空间不尽相同,但是目前可以暂时将它想像为,一个变数便会佔用一个记忆体位置。
然而,清单(List)的情况与变数有些不同,上述所展示的清单宣告(List< int > mylist),就真的单纯是在告诉程式,这个清单的名称及类型。此时,若将变数放入清单中,程式便会显示错误,因为记忆体还未让出空间给清单使用。清单宣告之后,还需加上 “new List< int >()”,记忆体才会为这个清单闢出一个空间,让清单能够放置变数。完整的清单宣告,以及借用空间的程式就会是:
=> List< int > mylist = new List< int >();
(今天先说明到这里,我们明天再继续)