JScript 修飾詞
更新:2007 年 11 月
JScript 修飾詞 (Modifier) 可以變更類別、介面或類別或介面成員的行為和可視性。您可以在定義類別和介面時使用修飾詞,但是它們通常並非必要項。
可視性修飾詞
可視性修飾詞可以限制外部程式碼存取類別、介面和其他成員的方式。您可以使用限制,藉由避免呼叫特定的內部方法和欄位,來促進良好的物件導向程式設計作法。
根據預設,任何程式碼只要能夠存取類別,也能存取該類別的任何成員。使用可視性修飾詞,就可以選擇性地不讓外部程式碼存取特定的類別成員,或是只允許取來自相同套件 (Package) 的類別才可以存取成員,或只允許衍生類別 (Derived Class) 存取類別成員。
可視性修飾詞不可以套用到全域函式或變數。protected 和 internal 是唯一能夠同時使用的可視性修飾詞。
可視性修飾詞 |
有效對象 |
意義 |
---|---|---|
類別、類別成員、介面、介面成員或列舉型別 |
可以存取沒有可視性限制之類別的程式碼,可以看見成員。根據預設,在 JScript 中,類別、介面及其成員都是公用的 (Public)。 |
|
類別成員 |
只有在已宣告成員的類別內,才可以看見成員。但是對衍生類別 (Derived Class) 而言,就不是可見的。目前類別外部的程式碼無法存取 Private 成員。 |
|
類別成員 |
只有在已宣告成員的類別以及該類別的衍生類別中,才可以看見成員。protected 修飾詞不能在套件範圍內供類別使用,但是可以供巢狀類別 (Nested Class) 使用。 |
|
類別、類別成員和列舉型別 |
類別、類別成員或列舉型別 (Enumeration) 在已宣告它們的套件中的任何位置,都是可見的。但是,如果在套件外部,就無法看見。 |
繼承修飾詞
繼承 (Inheritance) 修飾詞讓您能控制衍生類別中的方法和屬性 (Property) 如何覆寫基底類別中的方法和屬性。您可以使用這個控制項來管理衍生類別的方法是否會覆寫所建立的類別。
根據預設,除非在衍生類別中使用版本安全的 hide 屬性 (Attribute),否則來自衍生類別的方法將會覆寫基底類別方法。這個屬性 (Attribute) 可以防止覆寫發生。使用繼承修飾詞有助於您控制是否一定會或一定不會覆寫特定的方法。
有些情況下,您可能需要確保基底類別方法不會被覆寫。例如,如果您在套件中定義一個類別,可以使用 final 修飾詞來確保衍生類別將不會變更該類別的方法和屬性 (Property)。
另一方面,您可能需要覆寫類別中的某些方法。例如,您可以建立一個可以提供某些基本功能的類別,但卻對某些方法使用 abstract 修飾詞。抽象方法的實作是由衍生類別的寫入器來決定。
版本安全修飾詞也能從衍生類別 (而非基底類別) 管理覆寫。版本安全修飾詞只有在它們所覆寫的基底類別方法沒有繼承修飾詞時才有效。
您不能組合兩個繼承修飾詞,或是組合繼承修飾詞與 static 修飾詞。
繼承修飾詞 |
有效對象 |
意義 |
---|---|---|
類別、方法或屬性 |
如果是方法或屬性,這個修飾詞表示成員沒有實作。如果是類別,這個修飾詞表示有一或多個未實作的方法。抽象類別或包含抽象成員的類別無法利用 new 關鍵字來具現化 (Instantiated),但是可以當做基底類別來使用。 |
|
類別、方法或屬性 |
用於無法被擴充的類別或無法被覆寫的方法。使用 final 可防止衍生類別藉由覆寫重要函式來變更類別的行為。含 final 修飾詞的方法可以被隱藏或多載,但不能被覆寫。 |
版本安全修飾詞
版本安全修飾詞可以控制衍生類別的方法,這些方法能夠覆寫基底類別的方法。您可以使用這個控制項,管理所建立的類別是否會覆寫基底類別中的方法。
根據預設,來自衍生類別的方法將覆寫基底類別中的方法,雖然衍生類別定義中的繼承修飾詞也可以防止覆寫。您可以使用版本安全修飾詞來控制特定的方法是否會被覆寫。
有些情況下您可能需要確保基底類別方法沒有被覆寫。例如,您可能會擴充一個類別以變更基底類別方法的行為。如果您不希望基底類別中的這些方法被覆寫,則可以為方法宣告使用 hide 修飾詞。
另一方面,您可能想要覆寫某些基底類別方法。例如,您可能想變更類別的方法,但不修改這個類別。藉由為方法宣告擴充類別及使用 override 修飾詞,就可以用新的方法來覆寫基底類別。
版本安全修飾詞的使用能否成功,是取決於基底類別方法的宣告是否使用繼承修飾詞。除非為抽象的基底類別方法設定明確的實作,否則以 final 修飾詞標記的基底類別方法便無法被覆寫,而以 abstract 修飾詞標記的基底類別方法則無法被隱藏。
您不能組合兩個版本安全修飾詞,或是組合版本安全修飾詞與 static 修飾詞。在版本安全模式中執行時,每個會覆寫基底類別方法的方法只能使用一個版本安全修飾詞。
版本安全修飾詞 |
有效對象 |
意義 |
---|---|---|
方法或屬性 |
基底類別中,成員不會以相同的名稱覆寫成員。 |
|
方法或屬性 |
依預設,成員會覆寫基底類別中相同名稱的成員。 |
expando 修飾詞
expando 修飾詞讓類別架構的物件以類似 JScript 物件的方式來運作。方法和屬性 (Property) 可以用動態的方法加入 expando 物件。如需詳細資訊,請參閱原型架構的物件。
您可以使用與其他修飾詞無關的 expando 修飾詞。
修飾詞 |
有效對象 |
意義 |
---|---|---|
類別或方法 |
如果是類別,會指定預設且索引的屬性 (Property),該屬性能夠儲存和擷取動態的屬性 (Expando)。如果是方法,則表示它是 Expando 物件的建構函式。 |
static 修飾詞
static 修飾詞表示類別成員屬於類別本身,而不屬於類別的執行個體。因此,類別的特定資料和方法,不能與任何特定的執行個體有關聯。
您不能組合 static 修飾詞與任何版本安全或繼承修飾詞。
修飾詞 |
有效對象 |
意義 |
---|---|---|
方法、屬性、欄位或類別 |
如果是方法,表示它可以在沒有類別的執行個體的情況下被呼叫。如果是屬性和欄位,表示全部的執行個體共用一個複本。static 修飾詞不應該與 static 陳述式混淆,陳述式代表初始化類別的程式碼。 |