IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Quel est l'équivalent du friend du C++ ?


Sujet :

C#

  1. #1
    Membre actif Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 217
    Points
    217
    Par défaut [C#] Quel est l'équivalent du friend du C++ ?
    Bonjour, voila j'aimerais qu'une classe puisse modifier un attribut prive d'une autre classe. En C++ c'est le mot cle friend, et en c# ?
    merci

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    internal il me semble
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre actif Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Oui, ca semble etre ca. merci neguib
    mais ton lien sur msdn montre un exemple d'un cas ou ca marche pas, alors ca c'est tres fort

  4. #4
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Y'a pas d'équivalent de friend en C#.
    Le plus proche que tu puisses avoir est internal, effectivement.

    Et de foute façon, friend c'est MAL

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par 5:35pm
    Oui, ca semble etre ca. merci neguib
    mais ton lien sur msdn montre un exemple d'un cas ou ca marche pas, alors ca c'est tres fort
    Bah je suis pas encore modérateur de la MSDN
    qu'est-ce qui ne répond pas à ton besoin en fait ?
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Friend existe en VB .Net en tout cas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Friend Class MaClasse
    ' Cette Classe ne sera pas accesible
    ' à tout projet ajoutant cette DLL ou cet EXE en référence.
    End Class
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par FremyCompany
    Friend existe en VB .Net en tout cas...
    effectivement Friend VB.Net est directement l'équivalent d'internal C#
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Ah ok.

    Pourquoi dans ce cas avoir utilsé Internal, si en C++ on utilisait Friend... Ils sont fou ces C#iens !

    Mais dis-moi, c'est quoi cette folie :
    En MSIL, on peut remplacer un objet friend ?!
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Ce sujet a déjà été traité ici : http://www.developpez.net/forums/sho...d.php?t=126771
    On ne peut pas faire boire un âne qui n'a pas soif.

  10. #10
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par FremyCompany
    Ah ok.

    Pourquoi dans ce cas avoir utilsé Internal, si en C++ on utilisait Friend... Ils sont fou ces C#iens !

    Mais dis-moi, c'est quoi cette folie :
    En MSIL, on peut remplacer un objet friend ?!
    Là faudrait qu'un spécialiste du C++/CLI nous rejoigne, sinon il me semble que le Friend VB.Net et internal C# deviennent assembly en IL

    Arf merci NicolasG j'avais oublié ce post
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  11. #11
    Membre actif Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    merci les gars pour vos reponses, la classe amie est dans le meme assembly, donc c'est nickel

    Citation Envoyé par davcha
    Y'a pas d'équivalent de friend en C#.
    Le plus proche que tu puisses avoir est internal, effectivement.

    Et de foute façon, friend c'est MAL

    bah, dans certains cas, friend est tres utile, et je suis dans un cas ou j'en est besoin
    Ca m'embete de creer une methode qui modifie cet attribut, car je veux qu'un seul objet puisse y toucher...

  12. #12
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Citation Envoyé par FremyCompany
    Pourquoi dans ce cas avoir utilsé Internal, si en C++ on utilisait Friend... Ils sont fou ces C#iens !
    Les deux mots clefs n'ont pas le même sens.
    Le friend du C++ permet à la classe amie d'accéder aux membres privés de son amie.
    L'internal du C# est équivalent à un "public restreint à l'assembly courant".

    Citation Envoyé par 5:35pm
    bah, dans certains cas, friend est tres utile, et je suis dans un cas ou j'en est besoin
    Ca m'embete de creer une methode qui modifie cet attribut, car je veux qu'un seul objet puisse y toucher...
    Ca m'intéresse d'en savoir un peu plus sur ton problème là. J'ai déjà eu le cas plusieurs fois moi aussi, et je me demande en fait si un tel besoin est dû à une mauvaise conception ou à un véritable besoin réel.


    Ah sinon... A propos du lien vers l'ancienne discussion à ce sujet. On ne peut accéder qu'aux membres statiques d'une classe parente.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A{
      private int a;
      private static int b;
     
      class B{
        //...
        void fonction pouet(){
          a = 2; // erreur de compil
          b = 2; // Ok !
        }
    }

  13. #13
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Private ==> Protected dans cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Class BaseClass
    Protected Field as Boolean
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Class1 : Inherits BaseClass
    Public Sub Action()
    Me.Field = True
    New Class2().ChangeF2(2,Me)
    Me.Field = False
    End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Class Class2 : Inherits BaseClass
    Private Field2 as Integer
    Public Sub ChangeF2(Byval Value as Integer, Byval C2 as Class1)
    If C2.Field = True Then
    Me.Field2=Value
    End if
    End Sub
    End Class
    ?
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  14. #14
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Citation Envoyé par FremyCompany
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Class BaseClass
    Protected Field as Boolean
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Class1 : Inherits BaseClass
    Public Sub Action()
    Me.Field = True
    New Class2().ChangeF2(2,Me)
    Me.Field = False
    End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Class Class2 : Inherits BaseClass
    Private Field2 as Integer
    Public Sub ChangeF2(Byval Value as Integer, Byval C2 as Class1)
    If C2.Field = True Then
    Me.Field2=Value
    End if
    End Sub
    End Class
    Ce qui est en rouge ne va pas compiler.

    Class2 n'hérite pas de Class1. Et de toute façon, même si Class2 héritait de Class1, étant donné que Class1 est passé en tant que paramètre formel d'une méthode de Class2 (autrement dit, ce n'est pas l'objet hérité de Class2), tu ne pourras pas accéder aux membres protégés de C2.

  15. #15
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Oui, pardon, je n'avais pas fait attention...
    Ajoutons alors une ReadOnly Property GetField qui renvoie la valeur de Field
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  16. #16
    Membre actif Avatar de 5:35pm
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 201
    Points : 217
    Points
    217
    Par défaut
    Citation Envoyé par davcha
    Ca m'intéresse d'en savoir un peu plus sur ton problème là. J'ai déjà eu le cas plusieurs fois moi aussi, et je me demande en fait si un tel besoin est dû à une mauvaise conception ou à un véritable besoin réel.
    non, la conception est parfaite
    J'ai un objet LocalData, qui est la base de donnees locale a l'appli, on accede a des donne a travers des methodes publique. Il y a un Dataset en prive qui detient des donnees.
    Ensuite j'ai un objet ServerBridge, qui s'occupe de communiquer avec le serveur. Il se trouve que les donnee du dataset proviennent du serveur, donc pour initialiser mon dataset prive, LocalData doit se faire ami-ami avec ServerBridge.
    La solution de mettre ServerBridge en Internal me conviens tout autant, au lieu que ServeurBridge initialise le DataSet de LocalData, LocalData appel une methode de ServerBridge qui renvoie le DataSet.
    Voila!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/01/2006, 22h39
  2. Quel est l'équivalent de Findcomponent pour les Forms ?
    Par Ben_Le_Cool dans le forum Composants VCL
    Réponses: 12
    Dernier message: 23/09/2005, 12h48
  3. Quel est l'équivalent de realloc en C++ ?
    Par xavlours dans le forum C++
    Réponses: 4
    Dernier message: 13/05/2005, 13h36
  4. Quel est l'équivalent de UBound de VB en delphi
    Par Isa31 dans le forum Langage
    Réponses: 2
    Dernier message: 03/02/2005, 14h37
  5. Réponses: 4
    Dernier message: 21/09/2003, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo