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
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
internal il me semble
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
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 je suis pas encore modérateur de la MSDNEnvoyé par 5:35pm
qu'est-ce qui ne répond pas à ton besoin en fait ?
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
effectivement Friend VB.Net est directement l'équivalent d'internal C#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 ?!
Ce sujet a déjà été traité ici : http://www.developpez.net/forums/sho...d.php?t=126771
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 ILEnvoyé par FremyCompany
Arf merci NicolasG j'avais oublié ce post
merci les gars pour vos reponses, la classe amie est dans le meme assembly, donc c'est nickel
Envoyé par davcha
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...
Les deux mots clefs n'ont pas le même sens.Envoyé par FremyCompany
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".
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.Envoyé par 5:35pm
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 ! } }
Private ==> Protected dans cet exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3Public 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.Envoyé par FremyCompany
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.
Oui, pardon, je n'avais pas fait attention...
Ajoutons alors une ReadOnly Property GetField qui renvoie la valeur de Field
non, la conception est parfaiteEnvoyé par davcha
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!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager