Bonnes pratiques pour le développement de solutions > Espaces de noms et modificateurs d'accès > Utilisation des espaces de noms et des modificateurs d'accès
Utilisation des espaces de noms et des modificateurs d'accès
Règles pour le modificateur d'accès
Les entités avec modificateur d'accès Aucun sont accessibles à partir de toutes les autres entités.
Les entités privées ne sont accessibles que depuis leurs propres projets.
Les entités restreintes ne sont accessibles qu'à partir du même projet et des espaces de noms autorisés.
Les caractéristiques avec modificateur d'accès Aucun sur une entité ayant également pour modificateur d'accès Aucun sont accessibles à partir de toutes les autres entités.
Les caractéristiques avec modificateur d'accès Aucun sur une entité restreinte sont accessibles uniquement à partir des espaces de noms autorisés.
Les caractéristiques avec modificateur d'accès Aucun sur une entité privée sont accessibles uniquement à partir du projet dans lequel elles sont définies.
Les caractéristiques restreintes ne sont accessibles qu'à partir du même projet et des espaces de noms autorisés.
Les caractéristiques privées ne sont accessibles qu'à partir du projet dans lequel elles sont définies.
Si une entité est définie sur PRIVE, ses caractéristiques ne peuvent pas avoir une étendue RESTREINT.
Les caractéristiques internes ne sont accessibles qu'à partir de l'entité à laquelle appartient la caractéristique.
Lorsqu'une entité ou une caractéristique est créée, elle hérite de l'étendue de son parent.
Voici les modificateurs d'accès classés dans l'ordre de leur étendue.
Aucune >> Restreinte >> Privée >> Interne
Aucune est plus large que Restreinte, Privée et Interne.
Restreinte est plus large que Privée et Interne.
Privée est plus large qu'Interne.
Le modificateur d'accès Interne est le plus restreint.
Exemples
Si [P2#Solution].[T2#Thing] essaye d'appeler [P1[n1.n2.n3]#Component].[T1#Thing], l'autorisation sera donnée, car si une entité ou une caractéristique est définie sur PUBLIC au sein d'un projet, avec ou sans espace de noms, elle peut être appelée/utilisée par toute autre entité ou caractéristique du même projet ou d'un projet avec un espace de noms différent.
Si [P2[n4.n5.n6]#BuildingBlock].[T2#Thing] essaye d'appeler [P1[n1.n2.n3]#Component].[T1#Thing], l'autorisation sera donnée, car si une entité ou une caractéristique est définie sur PUBLIC au sein d'un projet, avec ou sans espace de noms, elle peut être appelée.
Si [P2#Solution].[TT2#ThingTemplate] essaye d'appeler [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate], l'autorisation ne sera pas donnée, car si une entité ou une caractéristique est définie sur PRIVATE au sein d'un projet, avec ou sans espace de noms, elle peut être appelée/utilisée par toute autre entité ou caractéristique du même projet uniquement.
Si [P2[n4.n5.n6]#BuildingBlock].[TS2#ThingShape] essaye d'appeler [P1[n1.n2.n3]#Component].[TS1{PRIVATE}#ThingShape], l'autorisation ne sera pas donnée, car si une entité ou une caractéristique est définie sur PRIVATE au sein d'un projet, avec ou sans espace de noms, elle peut être appelée/utilisée par toute autre entité ou caractéristique du même projet uniquement.
Si [P1[n1.n2.n3]#Component].[T2{PRIVATE}#Thing].[S1#Service] essaye d'appeler [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate], l'autorisation sera donnée, car l'entité peut être appelée/utilisée par toute autre entité ou caractéristique au sein du même projet uniquement.
Si [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate].[Prop2{PRIVATE}#Property] essaye d'appeler [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{RESTRICTED[n1.n2]}#Service], l'autorisation ne sera pas donnée, car les caractéristiques avec un modificateur d'accès PUBLIC sur une entité définie sur RESTREINT ne sont accessibles qu'à partir des espaces de noms autorisés.
Si [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate] essaye d'appeler [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing], l'autorisation ne sera pas donnée, car les caractéristiques et entités restreintes ne sont accessibles qu'à partir du même projet et les espaces de noms autorisés.
Si [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing] essaye d'appeler [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate], l'autorisation sera donnée, car l'entité ou la caractéristique avec l'étendue Aucune (PUBLIC) est accessible à tout le monde.
Si P1[n1.n2.n3]#BuildingBlock].[T2{RESTRICTED[n1.n2]}#Thing].[Prop2{RESTRICTED[n1.n2]}#Property] essaye d'appeler [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{INTERNAL}#Service], l'autorisation ne sera pas donnée, car les caractéristiques internes ne sont accessibles qu'à partir de l'entité à laquelle appartient la caractéristique.
Si [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[Prop1{PRIVATE}#Property] essaye d'appeler [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{INTERNAL}#Service], l'autorisation sera donnée, car les caractéristiques internes ne sont accessibles qu'à partir de l'entité à laquelle appartient la caractéristique.
Est-ce que cela a été utile ?