Type Collection = class public Function Create(); Function SetIgnoreCase(value); Function SetActivate(value); Function GetActivate(); Function CalNewName(prefix); Function CompareFunction(index, data); Function AddCollection(obj, name); Function RemoveCollection(index); Function Operator[](index); Function GetCount(); public class Function GetInstance(value); private ignorecase_; // 忽略大小写 container_; // 容器对象 fp_; // 函数指针 -- 用来比较 activate_; // 激活的对象 private static collection_; End; // ============== 实现 ================= // Function Collection.Create(); Begin container_ := ContainerList(); ignorecase_ := false; fp_ := FindFunction("CompareFunction", self); End; Function Collection.SetIgnoreCase(value); Begin ignorecase_ := value; End; Function Collection.SetActivate(value); Begin activate_ := self[value]; End; Function Collection.GetActivate(); Begin return activate_; End; Function Collection.CompareFunction(index, data); Begin return (ifnumber(index) and data.index = index) or data.name = index or (ignorecase_ and lowercase(data.name) = lowercase(index)); End; Function Collection.CalNewName(prefix); Begin len := GetCount() + 1; name := prefix $ len; while container_.Get(name, fp_) do name := prefix $ ++len; return name; End; class Function Collection.GetInstance(value); Begin if not istable(collection_) then collection_ := array(); if not collection_[value] then collection_[value] := new Collection(); return collection_[value]; End; Function Collection.AddCollection(obj, name); Begin data := new Data(); data.obj := obj; data.name := name; data.index := GetCount() + 1; return container_.Add(data); End; Function Collection.RemoveCollection(index); Begin return container_.Remove(index, fp_); End; Function Collection.GetCount(); Begin return container_.Size(); End; Function Operator Collection.[](index); Begin ret := container_.Get(index, fp_); return ret ? ret.obj : nil; End; // 集合中需要记录的数据 Type Data = class obj; name; index; End;