Construction Object Class Problème [Résolu]

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

Votre réponse

17 réponses

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

Myke

Merci cs_Myke 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_Myke
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 22 juin 2007 à 21:52
0
Merci
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
Commenter la réponse de cs_casy
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 22 juin 2007 à 21:59
0
Merci
Salut,
Utilise le mot-clé internal, ça rend l'identifieur accessible partout uniquement dans le namespace en cours.

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

<hr size="2" width="100%" />Julien.
Commenter la réponse de Julien237
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 22 juin 2007 à 22:02
0
Merci
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.
Commenter la réponse de Julien237
cs_Myke 138 Messages postés mercredi 5 février 2003Date d'inscription 2 février 2010 Dernière intervention - 22 juin 2007 à 22:07
0
Merci
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
Commenter la réponse de cs_Myke
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 22 juin 2007 à 22:10
0
Merci
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.
Commenter la réponse de Julien237
cs_Myke 138 Messages postés mercredi 5 février 2003Date d'inscription 2 février 2010 Dernière intervention - 23 juin 2007 à 05:07
0
Merci
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
Commenter la réponse de cs_Myke
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 23 juin 2007 à 08:36
0
Merci
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.
Commenter la réponse de Julien237
cs_Myke 138 Messages postés mercredi 5 février 2003Date d'inscription 2 février 2010 Dernière intervention - 23 juin 2007 à 17:32
0
Merci
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
Commenter la réponse de cs_Myke
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 23 juin 2007 à 20:47
0
Merci
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.
Commenter la réponse de Julien237
cs_Myke 138 Messages postés mercredi 5 février 2003Date d'inscription 2 février 2010 Dernière intervention - 25 juin 2007 à 16:51
0
Merci
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
Commenter la réponse de cs_Myke
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 25 juin 2007 à 17:05
0
Merci
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.
Commenter la réponse de Julien237
cs_Myke 138 Messages postés mercredi 5 février 2003Date d'inscription 2 février 2010 Dernière intervention - 26 juin 2007 à 15:41
0
Merci
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
Commenter la réponse de cs_Myke
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 27 juin 2007 à 13:46
0
Merci
Non

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

Myke
Commenter la réponse de cs_Myke
cs_Myke 138 Messages postés mercredi 5 février 2003Date d'inscription 2 février 2010 Dernière intervention - 11 sept. 2007 à 22:22
0
Merci
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
Commenter la réponse de cs_Myke

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.