前一篇我們說明了使用 ExpandoObject 輕易自製出動態物件的能力,光是使用 ExpandoObject 就能滿足我們大多數的需求,不過若是想要進一步的深入到動態語言的機制來建立動態物件的話,那麼我們可以利用 DynamicObject 物件來實作。
[.NET] 動態語言能力:自製 dynamic 物件 (2): 使用 DynamicObject 物件
- 8877
- 0
- C# and VB.NET
前一篇我們說明了使用 ExpandoObject 輕易自製出動態物件的能力,光是使用 ExpandoObject 就能滿足我們大多數的需求,不過若是想要進一步的深入到動態語言的機制來建立動態物件的話,那麼我們可以利用 DynamicObject 物件來實作。
dynamic 型別,這個由 C# 4.0 (.NET Framework 4.0) 開始,打開了 C# 這個編譯式語言的動態之路,它的執行時期決議機制,使得開發人員能在只知道它的成員的情況下即可呼叫使用,它是動態語言執行期 (Dynamic Language Runtime, DLR) 的一部份,相對於 CLR (Common Language Runtime) 需要編譯才會產生相關的程式結構,在 DLR 的機制下,程式只在執行期才會解析相關的程式結構,並產生執行器所需要的資訊,而由於 DLR 是在 CLR 之上,使得 DLR 平台可完全相容於 CLR,並且與 CLR-compliant 的平台與程式語言相互使用。
前面的幾篇文章大概介紹了常用的 JavaScript 物件導向的功能,包含物件的宣告,屬性,方法,事件等特性,也介紹了多型的部份,這次要介紹的是在 Design Pattern 中很常用的功能-靜態類別 (static class) 和成員。
在前一篇中我們介紹了基礎的 JavaScript 繼承實作法,透過 Object.prototype 我們可以自由決定物件要繼承自哪個物件,也可以擴充物件目前現有的屬性和方法 (和 C# 的 Extension Method 有異曲同工之妙),在本篇中,我們要來介紹物件導向的另一個特性:多型 (Polymorphism)。
身為一個物件導向的程式開發人員,應該不會不知道繼承 (inheritance) 是什麼吧,它可以讓子類別擁有父類別的完整功能,並透過 private/protected/internal 等修飾子 (modifier) 做封裝的保護,子類別也可以存取父類別的資源,子類別也可以選擇允許或不允許給其他物件繼承等等,若是想要在不修改原本物件的情況下擴充原有功能,繼承是一個好方法。
JavaScript 自從 Netscape 開發它以來,就幾乎已經確立它在 Web-based 前端應用程式的龍頭地位,即便在瀏覽器大戰第一回中勝出的微軟所開發的 VBScript 也無法取代它,除了它本身簡潔的描述式直譯語言特性外,它也是目前為止較多人認識,真正可跨平台的語言之一,隨著 Web 2.0 以及前端無刷新使用者介面的強勁需求,JavaScript 也已經成為一位合格的 Web Developer 必須要學會且熟練的程式語言,正因為它日益重要,它是否能被物件導向化就成為當初在制訂標準以及瀏覽器實作上的重點項目。畢竟物件導向語言 (C#, Java, VB.NET, Object Pascal, …) 還是程式語言的主力之一,而且物件導向程式語言的可重覆使用性 (reusability) 是最高的,所以 JavaScript 中運用物件導向的能力,將會成為 JavaScript 的基本功之一。