« 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=' | |||
<filebox fn='ProjectA\Properties\AssemblyInfo.cs'> | |||
using System.Runtime.CompilerServices; | using System.Runtime.CompilerServices; | ||
// | // set ProjectB as friend assembly | ||
[assembly: InternalsVisibleTo(" | [assembly: InternalsVisibleTo("ProjectB")] | ||
namespace | <filebox fn='ProjectA\ClassA.cs'> | ||
namespace ProjectA | |||
{ | { | ||
class | internal class ClassA {} | ||
} | } | ||
</filebox> | </filebox> | ||
<filebox fn=' | <filebox fn='ProjectB\ClassB.cs'> | ||
namespace | namespace ProjectB | ||
{ | { | ||
class | class ClassB | ||
{ | { | ||
public | public ClassB() | ||
{ | { | ||
// | // internal ClassA from assembly ProjectA is accessible from assembly ProjectB because ProjectA is a friend assembly of ProjectB | ||
var a = new | 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(); } } } |