開發解決方案的最佳作法 > 命名空間與存取修飾詞 > 使用命名空間與存取修飾詞
使用命名空間與存取修飾詞
存取修飾詞的規則
具有「無」存取修飾詞的實體可從其他所有實體存取。
私人實體只能從其自己的專案存取。
受限制的實體只能從相同專案及允許的命名空間存取。
實體 (同時具有「無」存取修飾詞) 上具有「無」存取修飾詞的特徵從其他所有實體存取。
受限制實體上具有「無」存取修飾詞的特徵只能從允許的命名空間存取。
私人實體上具有「無」存取修飾詞的特徵只能從在其中定義特徵的專案存取。
受限制的特徵只能從相同專案及允許的命名空間存取。
私人特徵只能從在其中定義特徵的專案存取。
如果實體為 PRIVATE,則特徵不得具有 RESTRICTED 範圍。
內部特徵只能從特徵所屬實體存取。
如果已建立實體或特徵,則它將會繼承其父項的範圍。
所提及存取修飾詞的範圍寬泛性順序如下。
無 >> 受限制 >> 私人 >> 內部
「無」比「受限制」、「私人」與「內部」的範圍更寬。
「受限制」比「私人」與「內部」的範圍更寬。
「私人」比「內部」的範圍更寬。
「內部」是範圍最窄的存取修飾詞。
範例
如果 [P2#Solution].[T2#Thing] 嘗試呼叫 [P1[n1.n2.n3]#Component].[T1#Thing],將會允許,因為如果專案內的實體或特徵為 PUBLIC,則在具有命名空間或沒有命名空間的情況下,其可由相同專案或具有不同命名空間之專案內的其他任何實體或特徵所呼叫/使用。
如果 [P2[n4.n5.n6]#BuildingBlock].[T2#Thing] 嘗試呼叫 [P1[n1.n2.n3]#Component].[T1#Thing],將會允許,因為如果實體或特徵在專案中為 PUBLIC,則在具有命名空間或沒有命名空間的情況下,可以呼叫它。
如果 [P2#Solution].[TT2#ThingTemplate] 嘗試呼叫 [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate],將不允許,因為如果專案內的實體或特徵為 PRIVATE,則在具有命名空間或沒有命名空間的情況下,其只能由相同專案內的其他任何實體或特徵所呼叫/使用。
如果 [P2[n4.n5.n6]#BuildingBlock].[TS2#ThingShape] 嘗試呼叫 [P1[n1.n2.n3]#Component].[TS1{PRIVATE}#ThingShape],將不允許,因為如果專案內的實體或特徵為 PRIVATE,則在具有命名空間或沒有命名空間的情況下,其只能由相同專案內的其他任何實體或特徵所呼叫/使用。
如果 [P1[n1.n2.n3]#Component].[T2{PRIVATE}#Thing].[S1#Service] 嘗試呼叫 [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate],將會允許,因為它只能由相同專案內的其他任何實體或特徵所呼叫/使用。
如果 [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate].[Prop2{PRIVATE}#Property] 嘗試呼叫 [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{RESTRICTED[n1.n2]}#Service],將不允許,因為 RESTRICTED 實體上具有 PUBLIC 存取修飾詞的特徵只能從允許的命名空間存取。
如果 [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate] 嘗試呼叫 [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing],將不允許,因為受限制實體與特徵只能從相同專案及允許的命名空間存取。
如果 [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing] 嘗試呼叫 [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate],將會允許,因為具有「無」 (PUBLIC) 範圍的實體或特徵可以由任何人存取。
如果 P1[n1.n2.n3]#BuildingBlock].[T2{RESTRICTED[n1.n2]}#Thing].[Prop2{RESTRICTED[n1.n2]}#Property] 嘗試呼叫 [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{INTERNAL}#Service],將不允許,因為內部特徵只能從特徵所屬的實體存取。
如果 [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[Prop1{PRIVATE}#Property] 嘗試呼叫 [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{INTERNAL}#Service],將不允許,因為內部特徵只能從特徵所屬的實體存取。
這是否有幫助?