在ArcObjects中類分為三種,分别是抽象類(Abstract Class),元件類(CoClass)和普通類(Class)[普通類也叫做執行個體化類]。
如下圖所示:

為了更能形象的說明問題,将上圖具體化一個示例,如下圖所示:
抽象類隻能被繼承。
元件類可以用New關鍵字建立。
普通類不能用New關鍵字建立,可以認為它的構造函數是private的,隻能通過其他類(普通類或元件類)的方法産生,這個過程稱為執行個體化。
如下面的例子,A和B為普通類對象,C為元件類對象,D為一個普通類,如下面的代碼:
A = B.writeA() 正确
A = C.writeA() 正确
A = New D() 不正确,普通類不能通過new的方法産生
A可以由B和C的writeA方法産生,A的生命周期是由産生它的對象的B和C控制的,如果B或C對象在記憶體中被釋放了,則此對象也将從記憶體中消失。
下面舉一個ArcObjects中普通類的例子:
以上圖檔說明WorkspaceClass是個普通類,不能夠直接建立,但是可以通過IWorkspaceFactory接口的open方法來執行個體化産生,如下圖所示:
如果某個類是抽象類(比如WorkspaceFactory類)或者是普通類(比如Workspace類),那麼我們在檢視該類的幫助文檔時,會發現在一開始就有如下一句話:
SomeClass is a non-creatable object. References to non-creatable objects must be obtained through other objects.
類之間的關系有四種:繼承、依賴、關聯、組合。
繼承比較簡單,就不說了。
依賴關系:比如A---------->B,就說一個對象有方法産生另一個對象,A的一個方法産生了B,即執行個體化産生了B的一個對象。當A的狀況發生變化時,B也會發生變化,如果A消失,那麼B也會消失。即前者的生命周期決定後者的生命周期。
關聯關系:比如Owener 1...* ------------ 1...* Land Parcel,這兩個對象是松散的關聯關系,可以從一個類的對象通路到另一個類的對象。如一個土地可能有多塊土地,一塊土地也可能被多個所有者擁有。當其中的一個不存在時,另一個不會消失。再比如上圖中的chicken與nest的關系就是關聯關系。關聯關系是有方向的,如果隻存在一個方向,稱為單項關聯;如果是兩個方向都存在關系,則稱為雙相關聯。如果沒有标注1...*,預設就是1。
組合關系:一定要區分組合關系與關聯關系的差別,因為二者都有可能出現1...*,二者的差別是組合關系會出現一個黑色的菱形,而關聯關系沒有。比如上圖中的ckicken與wings就是組合關系,而且是一對多的組合關系。wings是chicken的一部分,當chicken消失的時候,wings自然就不複存在。我們可以認為wings是chicken的一個集合,wings是該集合中的一個對象,當集合為nothing的時候,集合内的對象也将是nothing,即wings的生命周期肯定是由chicken對象控制的,但wings的産生不受chicken的控制。