« Modificateurs d'accès » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
 
Ligne 25 : Ligne 25 :
Une assembly déclarée comme {{boxx|friend}} peut accéder aux membres {{boxx|internal}} de l'assembly courante.<br>
Une assembly déclarée comme {{boxx|friend}} peut accéder aux membres {{boxx|internal}} de l'assembly courante.<br>
Utile pour les [[Tests_unitaires|tests unitaires]].
Utile pour les [[Tests_unitaires|tests unitaires]].
<filebox fn='AssemblyA.ClasseA.cs'>
 
<filebox fn='ProjectA\Properties\AssemblyInfo.cs'>
using System.Runtime.CompilerServices;
using System.Runtime.CompilerServices;


// déclaration d'AssemblyB comme assembly friend
// set ProjectB as friend assembly
[assembly: InternalsVisibleTo("AssemblyB")]
[assembly: InternalsVisibleTo("ProjectB")]


namespace AssemblyA
<filebox fn='ProjectA\ClassA.cs'>
namespace ProjectA
{
{
     class ClasseA {} // internal par défaut
     internal class ClassA {}
}
}
</filebox>
</filebox>


<filebox fn='AssemblyB.ClasseB.cs'>
<filebox fn='ProjectB\ClassB.cs'>
namespace AssemblyB
namespace ProjectB
{
{
     class ClasseB
     class ClassB
     {
     {
         public ClasseB()
         public ClassB()
         {
         {
             // accès possible à ClasseA qui est internal car AssemblyB est déclarée comme friend d'AssemblyA
             // internal ClassA from assembly ProjectA is accessible from assembly ProjectB because ProjectA is a friend assembly of ProjectB
             var a = new AssemblyA.ClasseA();
             var a = new ProjectA.ClassA();
         }
         }
     }
     }
}
}
</filebox>
</filebox>

Version du 14 janvier 2022 à 16:19

Définitions

public Pas de restriction d'accès
protected Accès restreint à la classe contenante et aux classes qui en héritent
internal Accès restreint à l'assembly courante
protected internal Accès restreint à l'assembly courante OU aux classes qui héritent de la classe courante.
private Accès restreint à la classe contenante

Par défaut

internal class, struct et delegate définis dans un namespace
private membres de class, membres de struct, éléments imbriqués (class dans une class)

Friend assemblies

Une assembly déclarée comme friend peut accéder aux membres internal de l'assembly courante.
Utile pour les tests unitaires.

ProjectA\Properties\AssemblyInfo.cs
using System.Runtime.CompilerServices;

// set ProjectB as friend assembly
[assembly: InternalsVisibleTo("ProjectB")]

<filebox fn='ProjectA\ClassA.cs'>
namespace ProjectA
{
    internal class ClassA {}
}
ProjectB\ClassB.cs
namespace ProjectB
{
    class ClassB
    {
        public ClassB()
        {
            // internal ClassA from assembly ProjectA is accessible from assembly ProjectB because ProjectA is a friend assembly of ProjectB
            var a = new ProjectA.ClassA();
        }
    }
}