Pb classes imbriquées [Résolu]

cs_olivier_1968 5 Messages postés mercredi 1 juin 2005Date d'inscription 20 janvier 2009 Dernière intervention - 24 janv. 2008 à 18:17 - Dernière réponse : NHenry 14271 Messages postés vendredi 14 mars 2003Date d'inscription 14 octobre 2018 Dernière intervention
- 30 janv. 2008 à 13:33
Bonsoir à tous,

J'ai un petit probleme dans mon code VB .net

Voici le code :

Public Class PurchaseOrder
    Public shipTo As USAddress
    Public billTo As USAddress
    Public comment As String
End Class
Public Class USAddress
    Public name As String
    Public street As String
    Public city As String
    Public state As String
    Public zip As Decimal
End Class
Module Serial
Dim po As New PurchaseOrder

Public Sub main()
po.shipTo.city = "test"
End Sub
End Module

Le problem est que lorsque je veut renseigner po.shipTo.city = "test" le
system me dit que l'objet n'existe pas !!

Pourtant lorsque je tape ma ligne po.shitpto.   le vb m'ammene bien les
valeurs dispo en automatique c'est a dir name ou city ou state.
je pourrais déclarer directement  tt as new usaddress mais là je ne vois pas
l'interet de faire des classes imbriquées si il faut décalrer tout les
niveau.

Pour info mon code est largement plus compliqué que l'exemple ci dessus que
j'ai volontairement simplifié pour mieux cilber mon probleme.

J'espere que quelqu'un aura une idée.

Merci d'avance

Olivier
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 24 janv. 2008 à 23:50
3
Merci
salut

Public Sub main()

dim usadr as new USAddress
po.shipTo = usadr
usadr.city = "test"
End Sub

ou
po.shipTo  = new USAddress
po.shipTo.city = "test"

C'est comme tu veux
mais il faut instancier ton objet intermediaire ici ton Usadtress

evites d'utiliser les modules
utilise les classes (statiques pour avoir l'équivalent)

bon courage

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de nhervagault
Meilleure réponse
Kevin.Ory 843 Messages postés mercredi 22 octobre 2003Date d'inscription 7 janvier 2009 Dernière intervention - 25 janv. 2008 à 04:03
3
Merci
Ou plus simplement:

Public Class PurchaseOrder
    Public shipTo As New USAddress
    Public billTo As New USAddress
    Public comment As String
End Class

shipTo et billTo seront automatiquement instanciés lorsque un objet PurchaseOrder sera créé.

a+

Merci Kevin.Ory 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Kevin.Ory
NHenry 14271 Messages postés vendredi 14 mars 2003Date d'inscription 14 octobre 2018 Dernière intervention - 25 janv. 2008 à 09:37
0
Merci
Bonjour

Ou sinon utiliser une structure.

Public Structure PurchaseOrder
    Public shipTo As USAddress
    Public billTo As USAddress
    Public comment As String
End Structure
Public Structure USAddress
    Public name As String
    Public street As String
    Public city As String
    Public state As String
    Public zip As Decimal
End Structure

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Commenter la réponse de NHenry
Kevin.Ory 843 Messages postés mercredi 22 octobre 2003Date d'inscription 7 janvier 2009 Dernière intervention - 25 janv. 2008 à 22:08
0
Merci
Tu ne peux pas modifier un membre d'une strucure, donc ça par exemple ça ne fonctionnerait pas:

po.shipTo.city = "test"
Commenter la réponse de Kevin.Ory
NHenry 14271 Messages postés vendredi 14 mars 2003Date d'inscription 14 octobre 2018 Dernière intervention - 28 janv. 2008 à 09:04
0
Merci
Bonjour

Kevin, je vien de vérifier (j'avais déjà de gros doute), ce que tu vien de dire est complement faux, il est facile de modifier la valeur des membres d'une structure (il suffit qu'il soit accessible).
En .NET, les seules différences entre une classe et une structure, c'est que la structure ne peut pas avoir de constructeur par défaut et qu'elle est immédiatement crée lors de la déclaration (pas besoin de New) et que les attributs ne peuvent être initialisés dans leurs déclarations.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Commenter la réponse de NHenry
Kevin.Ory 843 Messages postés mercredi 22 octobre 2003Date d'inscription 7 janvier 2009 Dernière intervention - 29 janv. 2008 à 19:48
0
Merci
Effectivement NHenry

Mais:

Dim r As Rectangle
r.Location.X = 23

C'est aussi une structure dans une autre structure, mais ca ne fonctionne pas.. et je ne sais pas trop pourquoi . Location de Rectangle est Read/Write, et X de Point est aussi Read/Write, pourtant ceci génère l'erreur "Cette expression est une valeur et ne peut donc pas être la cible d'une assignation."

De là vient mon erreur. Si qqun pouvait expliquer pourquoi ceci ne fonctionne pas...

Une différence importante avec les structures est aussi que ce sont des variable par valeur, et non par référence comme une classe.. (si on les copie, on copie la valeur, pas la référence)
Commenter la réponse de Kevin.Ory
NHenry 14271 Messages postés vendredi 14 mars 2003Date d'inscription 14 octobre 2018 Dernière intervention - 30 janv. 2008 à 13:33
0
Merci
Bonjour

En effet, étrange
Je n'ai pas d'explication.
Mulder et Scully sauront peut être ...

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Commenter la réponse de NHenry

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.