Typé une propriété dans class imbriqué

cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 2 février 2010 - 6 août 2007 à 22:28
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 9 août 2007 à 20:18
Voici donc mon exemple



Public



Class
Main











Shared
_UserId

As



Integer


Public



Sub



New
(

ByVal
Par

As



Integer
)
....


End



Sub



Public



ReadOnly



Property
Nested()


   Get

      Return



New
NestedClass


   End



Get

End



Property





REM - Class Nested

      Friend



Class
NestedClass


         Public



Sub
GetElement()
            ....


         End



Sub

      End



Class

End



Class




J'aimerais typé la propriété Nested de la class MAIN (AS NestedClass) pour que Intellisense prenne en charge cette class et me donne les méthodes contenues dans la class Nested (Main.Nested.GetElement). Mais lorsque je la type il me donne ceci comme erreur: ('Nested' cannot expose type 'NestedClass' outside the project through class 'Main'.) Je peux dans ce cas mettre la class NestedClass à public mais j'aimerais faire disparaitre les class inutile du coté de Intelissense et je ne veux pas que le programmeur puissent obtenir une instance de NestedClass sans passez par Main. Est-ce que vous avez la solution ?

7 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
8 août 2007 à 22:32
Bonjour

Normal, tu tente d'afficher une classe visible en Friend (Ami) en Public.
Soit tu change la visibilité de la classe NestedClass soit tu réduit la visibilité de la propriété Nested.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 2 février 2010
8 août 2007 à 22:37
Ce que j'ai de la misère à comprendre c'est pourquoi ce la fonctionne quand même. Je n'ai pas la propriété GetElement à partr de intelissense mais je peux très coté client faire Main.Nested.GetElement si la propriété Nested n'est pas typé !

Myke
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
8 août 2007 à 22:41
Bonjour

Bon, je ne sais pas si tu as compris : Voici 2 versions ui devraient fonctionner :

Réduire la visibilité de la propriété :
Public
Class Main

Shared _UserId
As
Integer
Public
Sub
New(
ByVal Par
As
Integer)
....

End
SubFriendReadOnly
Property Nested()

   Get
      Return
New NestedClass

   End
Get
End
Property

REM - Class Nested
      Friend
Class NestedClass

         Public
Sub GetElement()
            ....

         End
Sub
      End
Class
End
Class

Auguementer la visibilité de la classe :
Public
Class Main

Shared _UserId
As
Integer
Public
Sub
New(
ByVal Par
As
Integer)
....

End
SubPublic
ReadOnly
Property Nested()

   Get
      Return
New NestedClass

   End
Get
End
Property

REM - Class Nested
      Public
Class NestedClass

         Public
Sub GetElement()
            ....

         End
Sub
      End
Class
End
Class

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 2 février 2010
8 août 2007 à 22:54
C'est probablement moi qui pose mes questions de travers . Voici un exemple de ce que je veux reproduire :  Une roue possède un bearing. Il me faudrait donc deux class. La premiere class : Roue et la deuxième Bearing. Par contre il n'est pas logique de créée un bearing avant d'avoir créée la class roue. J'ai tenté  le coup avec les class imbriqués mais peut-être que ce n'est pas la solution. Est-ce que tu as une idée.

  

Myke
0

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

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
9 août 2007 à 08:44
Bonjour

Imbriquer 2 classes n'est pas obligatoire, elle peuvent être déclarées indépendammant.
Il n'y a rien d'illogique à créer un Bearing alors que Roue n'est pas finie d'être déclarée :

Public Class Roue
    Private mBearing as Bearing 'Pössibilité de mettre un As New si les paramètres à passer sont constant
    public sub New(....)
       mBearing=new Bearing(...)
    end sub

    public readonly property Bearing as Bearing
       Get
          Return mBearing
       End get
    end property
end class

public class Bearing
    ...
end class

Est tout à fait valable et pas illogique (dépend de ton problème).

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
cs_Myke Messages postés 138 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 2 février 2010
9 août 2007 à 19:38
Je comprends ton point et mon exemple n'est peut-etre pas très bon. Je crois que je vais rester avec les class imbriqué car je ne veux pas que le programmeur utilise la class enfant si la class parent n'est pas declaré. Je reviens à ma question  si tu connais la reponse. On ne peut pas typé la propriété nested parce que la class nestedclass est friend. Mais si on fait rouler il utilise la liason tardive et cela fonctionne. Il me semble que cela n'est pas logique. S'il me donne une erreur lorsque je programme la class il devrait me donner une erreur lors de l'execution.

Myke
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
9 août 2007 à 20:18
Bonjour

Si tu veux fortement typer ta prop, réduit sa vidibilité, si ta classe est Friend, c'est illogique que ta prop soit public.

Et en VB.NET, il est vivement recommander de mettre Option Strict à On, tu y gagne sur tout le points.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
Rejoignez-nous