cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010
-
22 juin 2007 à 21:44
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010
-
11 sept. 2007 à 22:25
Voici j'aimerais savoir si j'utilise la bonne technique.
J'ai deux class comme suit
Public class User
Private _ListAutorisation
As Autorisation
Private _GivenName
As
String
Public
Property GivenName()
As
String
Get
Return
Me._GivenName
End
Get
Set(
ByVal value
As
String)
Me._GivenName = value
End
Set
End
Property
Public
ReadOnly
Property ListAcces()
AsAutorisation
Get
If
Me._Autorisation
IsNot
Nothing
Then
Return
Me._Autorisation
End
If
End
Get
End
Property
End Class
Public class Autorisation
sub new ()
Property #1
property #2
ect...
end class
Le problème est que je ne veux pas que la class Autorisation soit disponible à parti du code client et qu'on ne puissent acceder directement à la class autorisation sans avoir declarer l'objet user. Je met la class Friend Class Autorisation et il me donne un erreur : 'Autorisation' cannot expose type 'Autorisation' outside the project through class 'User'. J'ai mis l'erreur en rouge!
Est ce que quelqu'un peut m'expliquer et me donner plus de détails sur la facon de faire
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 22 juin 2007 à 21:52
L'explication est simple, tu met à disposition une propriété publique d'un type particulier. Pour que cette proriété soit accéssible depuis le programme client, il faut que celui-ci puisqque décalrer et utiliser un objet de ce type particulier. Par conséquent ce type doit lui aussi etre accessible depuis le programme client.
Après pour la façon de faire, je ne sais pas trop, je ne maitrise pas bien tout ça pour l'instant.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 22 juin 2007 à 22:02
Voilà, en VB le mot-clé est Friend et je me suis trompé, c'est accessible depuis ton assembly, pas depuis le namespace, mais c'est bien ce que tu cherche il me semble...
(Pff 3 messages pour dire un mot ^^ je vieillis...)
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010 22 juin 2007 à 22:07
Juilen tu m'avais donné de l'espoir
Et bien j'aimerais en savoir plus car si à la place de PublicReadOnlyProperty ListAcces() As
Autorisation Je met AS OBJECT. Cela fonctionne à merveille mais intellisense ne me donne pas le propriété.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 22 juin 2007 à 22:10
Ouch je suis vraiment fatigué, tu parle déjà du mot-clé Friend et Casy t'as déjà donné l'explication en fait ^^...
Les solutions sont simples, soit tu veux que l'utilisateur puisse utiliser la classe autorisation et tu la met en public ainsi que la propriété ListAccess, soit il n'y a pas accès et la propriété ListAccess doit être Friend (tout comme la classe).
Moi à ta place je ferais un compromis, c'est-à-dire que j'imagine que tu ne veux pas que l'utilisateur aie accès à Autorisation parce qu'il y a des propriété auxquels tu ne veux pas qu'il touche...
Donc met la classe autorisation en public et dans cette classe, met tout ce à quoi tu ne veux pas que l'utilisateur touche en Friend.
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010 23 juin 2007 à 05:07
Ben je commence a comprendre. Ce que je crois qui m'a embeté c'est le mot friend. Qu'est ce que cela veut dire accessible dans le même assembly d'Apres le msdn. Ce que je comprends c'est que le mot private et friend sont semblable au niveau des access
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 23 juin 2007 à 08:36
Ah non pas du tout !
Un assembly, c'est un fichier de code, donc un exe ou une dll, ce qui se traduit par un projet sous visual studio.
Donc avec Friend, le champs déclaré sera visible dans tout dont projet, mais pas à l'extérieur.
Avec Private ton champs n'est accessible qu'à l'intérieur de ta classe et nulle part ailleurs...
Private est beaucoup plus restrictif que Friend.
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010 23 juin 2007 à 17:32
Merci Julien de prendre le temps de me repondre. Je suis aller un peu loin en comparant private et friend. Je comprends que private se declare a l'intérieur d'une autre class. Peut-etre que ma question n'est pas clair. Tu as bien compris la problématique dans le 6ieme post. Par contre ce n'est pas que je ne veux pas qu'il est access au propriété de autorisation. Ce que je ne veux pas c'est qu'il est accèss a la class autorisation sans avoir déclarer la class user. Donc, pour résumer 1 etape le programmeur crée un objet user et ensuite il a accès a la class autorisation. As -tu un exeple a me montrer?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 23 juin 2007 à 20:47
En fait tu voudrais que l'utilisateur ne puisse pas créer de classe Autorisation lui-même ? Il ne peut que obtenir celles venant de la classe utilisateur ?
Si c'est ça, ce n'est pas compliqué, il suffit de mettre le(s) constructeur(s) de la classe Autorisation en Friend, et la classe autorisation ne pourra être créé que par ton code dans ton programme.
Si ce n'est pas ça je vais avoir besoin de réexplications :p
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010 25 juin 2007 à 16:51
C'est ce que je voulais faire! Je vais prendre ta solution.
Mais je t'explique quand même ce que j'avais en tete. Tu me diras si c'est possible. Disons que nous avon trois class. La premiere est disponible en tous temps. La deuxième est disponible lorsque la premiere est crééer et la troisième lorsque la deuxième est créer. Est-ce que c'est possible de faire cela?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 25 juin 2007 à 17:05
Oui hein, mais en aucun cas l'utilisateur ne pourra créer lui-même la deuxième ou la troisième classe, même lorsque les premières seront créées, il devra passer par une méthode, par exemple avec une structure comme ceci :
Classe 1 :
Public sub New(....)
Public Function CreateClasse2(Paramètres...)
...
Return New Classe2(...)
End Function
Classe 2 :
Friend Sub New(....)
Public Function CreateClasse3(Paramètres...)
...
Return New Classe3(...)
End Function
cs_Myke
Messages postés138Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 février 2010 26 juin 2007 à 15:41
Merci je comprends. C'est exactement ce que j'avais en tête. Dernière question pour faire plus propre. Existe un moyen de bloquer l'affichage de intellisense sur certaine class même si elle sont public ?