开发解决方案的最佳做法 > 名称空间和访问权限修饰符 > 使用名称空间和访问权限修饰符
使用名称空间和访问权限修饰符
访问权限修饰符的规则
访问权限修饰符为“无”的实体可从所有其他实体进行访问。
专用实体只能从其所属项目中访问。
受限实体只能从相同的项目和允许的名称空间访问。
在访问权限修饰符为“无”的实体上,访问权限修饰符同样为“无”的特征可从所有其他实体进行访问。
受限实体上访问权限修饰符为“无”的特征只能从允许的名称空间访问。
专用实体上访问权限修饰符为“无”的特征只能从其定义时所在的项目访问。
受限特征只能从相同的项目和允许的名称空间访问。
专用特征只能从其定义时所在的项目访问。
如果实体为 PRIVATE,则特征不能具有 RESTRICTED 范围。
内部特征只能从特征所属的实体访问。
所创建的实体或特征将继承父项的范围。
按广度顺序介绍访问权限修饰符。
无 >> 受限 >> 专用 >> 内部
“无”比“受限”、“专用”和“内部”范围更广。
“受限”比“专用”和“内部”范围更广。
“专用”比“内部”范围更广。
“内部”是范围最小的访问权限修饰符。
示例
如果 [P2#Solution].[T2#Thing] 尝试调用 [P1[n1.n2.n3]#Component].[T1#Thing],则允许调用,因为如果某个实体或特征在具有或没有名称空间的项目中为“公开”,则可以由同一项目或具有不同名称空间的项目中的任何其他实体或特征调用/使用。
如果 [P2[n4.n5.n6]#BuildingBlock].[T2#Thing] 尝试调用 [P1[n1.n2.n3]#Component].[T1#Thing],则允许调用,因为如果某个实体或特征在具有名称空间或没有名称空间的项目中为“公开”,则可以调用它。
如果 [P2#Solution].[TT2#ThingTemplate] 尝试调用 [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate],则不允许调用,因为如果某个实体或特征在具有或没有名称空间的项目中为“专用”,则仅可以由同一项目中的任何其他实体或特征调用/使用。
如果 [P2[n4.n5.n6]#BuildingBlock].[TS2#ThingShape] 尝试调用 [P1[n1.n2.n3]#Component].[TS1{PRIVATE}#ThingShape],则不允许调用,因为如果某个实体或特征在具有或没有名称空间的项目中为“专用”,则仅可以由同一项目中的任何其他实体或特征调用/使用。
如果 [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],则不允许调用,因为“受限”实体上具有“公开”访问权限修饰符的特征只能从允许的名称空间进行访问。
如果 [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],则允许调用,因为任何人都可以访问具有“无”(公开) 范围的实体或特征。
如果 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],则允许调用,因为只能从特征所属的实体访问内部特征。
这对您有帮助吗?