Construction Object Class Problème

Résolu
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 2 février 2010 - 22 juin 2007 à 21:44
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Derniè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

Myke

17 réponses

cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 2 février 2010
11 sept. 2007 à 22:25
Desolé plutot : <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>

Myke
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
22 juin 2007 à 21:59
Salut,
Utilise le mot-clé internal, ça rend l'identifieur accessible partout uniquement dans le namespace en cours.

<hr size="2" width="100%" />Julien.
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
22 juin 2007 à 22:00
Oups internal c'est un mot-clé C#, attends je te trouve l'équivalent VB...

<hr size="2" width="100%" />Julien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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...)

<hr size="2" width="100%" />Julien.
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Derniè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é.

Myke
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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.

<hr size="2" width="100%" />Julien.
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Derniè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

Myke
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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.

<hr width="100%" size="2" />Julien.
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Derniè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?

Myke
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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





<hr width="100%" size="2" />


Julien.
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Derniè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?

Myke
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
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

Classe 3 :

Friend Sub New(...)





<hr width="100%" size="2" />


Julien.
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Derniè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 ?

Myke
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
27 juin 2007 à 13:46
Non

<hr width="100%" size="2" />Julien.
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 2 février 2010
27 juin 2007 à 15:34
Parfait Merci pour tes réponses!

Myke
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 2 février 2010
11 sept. 2007 à 22:22
Je post parce que j'ai trouvé une solution pour cacher un composant d'une class à intellissense :





<System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)>



Et voila j'espere que cela vous sera utilile

Myke
0
Rejoignez-nous