Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Simuler des classes friend en C#

Je me suis déjà déjà posé la question suivante : comment faire pour qu'une certaine classe (B) puisse accéder à des membres d'une autre classe (A) sans que les classes dérivées de A, ni les classes qui ne disposent pas d'instance de B ne puissent y accéder. En C++ on peut utiliser l'attribut friend, mais en C# il fait trouver un subterfuge.

En fait il est possible de faire ça avec des Nested Classes (des classes déclarées à l'intérieur d'autres classes) :

public class A
{
   private int nb;

   public A(int nb)
   {
      this.nb = nb;
   }

   public class B
   {
      public void Print(A a)
      {
         Console.WriteLine(a.nb.ToString());
      }
   }
}

public class C
{
   public void Do(A.B b)
   {
      A a = new A(5);
      b.Print(a);
   }
}

Les classes dérivées de A ne pourront pas accéder à nb (qui est privé), alors que B pourra, puisqu'il est inclu dans A. Par contre je n'ai pas trouvé de moyen simple pour que B puisse accéder aux données privées de plusieurs classes (il faudrait que B soit incluse dans plusieurs classes à la fois ce qui est impossible)... si quelqu'un a une idée ?

Publié lundi 5 juin 2006 16:24 par RaptorXP
Classé sous : , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: Simuler des classes friend en C#

internal int nb; ne te suffit pas ?
lundi 5 juin 2006 18:50 by cyril

# re: Simuler des classes friend en C#

En fait avec internal, C a accès à nb sauf si il n'est pas dans le même assembly.
mardi 6 juin 2006 09:11 by RaptorXP

# re: Simuler des classes friend en C#

si je peux me permettre...

je ne vois pas l'intérêts de procéder de cette manière. Si tu veux qu'un membre soit accessible depuis une autre classe, il suffit simplement de créer une propriété (get/set).

ou alors, je n'ai pas bien compris où tu voulais en venir.
mardi 6 juin 2006 11:56 by sebmafate

# re: Simuler des classes friend en C#

Si j'ai bien compris la question, je pense que c'est possible avec des membres "internal" puis il faudrait implementer A et B dans des assemblys distinctes et en faire des assemblys friends avec l'attribut InternalsVisibleToAttribute.
mardi 6 juin 2006 16:51 by Lutinore

# re: Simuler des classes friend en C#

@sebmafate :

j'ai mal choisi mon exemple, si tu veux, remplace
"private int nb"
par
"private int Nb()
{
 return 0;
}"
et je voudrais que cette méthode Nb soit accessible depuis les méthodes de A (ça c'est toujours le cas), depuis les méthodes de B, (sans Nested Class, il faudrait que je le mette public) mais le problème c'est que je voudrais qu'aucune autre classe que B ne puisse y accéder (pas même les classes dérivées de A).

@Lutinore :
ça m'a l'air pas mal, je vais aller voir du coté de cet attribut ! merci !
mardi 6 juin 2006 17:26 by RaptorXP
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Solution Template et Project Template dans Visual Studio par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 2 heures et 28 minutes

- PocketIE et Assignation du SRC d'un Element IMG par Jerome Laban le il y a 3 heures et 20 minutes

- Conversion de fichiers RAW en fichier JPEG avec WPF par Perspective le il y a 3 heures et 56 minutes

- Mise à Jour du Moteur de Recherche des Arrêts de Bus de Montréal par Jerome Laban le il y a 4 heures et 40 minutes

- [WPF] XPSReader v0.2 par Blog Technique d'Audrey PETIT le il y a 5 heures et 41 minutes

- Entity Framework : providers Oracle, MySQL et PostgreSQL par Matthieu MEZIL le il y a 12 heures et 16 minutes

- [WPF] Nouvel article sur c2i.fr par Richard Clark le 09-06-2008, 17:33

- F# nouvelle CTP 1.9.6.2 (update) par Pierrick's Blog le 09-06-2008, 13:27

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le 09-05-2008, 17:45

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le 09-05-2008, 12:02