Classe correcte ?

Résolu
zebiker Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 12 novembre 2008 - 2 mars 2008 à 16:31
zebiker Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 12 novembre 2008 - 4 mars 2008 à 13:19
bonjour à tous
je ne comprend pas pourquoi j'ai une erreur, ca devrait etre simple :

Voici la classe que j'ai définie :

'definition radio class
Public Class uneRadio

    Private frequency As Double
    Private modulation As String
    Private description As String

    'constructor of creating a new object of type 'radio'
    Sub New(ByVal Lafreq As Double, ByVal Lemode As String, ByVal ladesc As String)
        frequency = Lafreq
        modulation = Lemode
        description = ladesc
    End Sub

    'constructors
    Public Function create(ByVal Lafreq As Double, ByVal Lemode As String, ByVal ladesc As String)
        frequency = Lafreq
        modulation = Lemode
        description = ladesc
    End Function

    'accessors
    Public Function laFrequency()
        Return frequency
    End Function

    Public Function laModulation()
        Return modulation
    End Function

    Public Function laDescription()
        Return description
    End Function
    'exemple de creation de radio :
    'Dim maradio As New uneRadio(89.4, librairie.leMode.FM, "salut toi")

End Class

Est ce que vous voyez une erreur ????  Moi non, VB non plus...

ensuite dans ma form je fais ceci :

'cree mon tablea de type unRadio
Dim lesRadioFav(10) As uneRadio
dim index as integer
For index = 0 To 10
    ' ET LA ERREUR :
    'Additional information: Object reference not set to an instance of an object.
    'a cause de la lign suivante :
    lesRadioFav(index).create(56.5, "AM", "description")
Next

Voila je comprend pas bien pourquoi cette erreur : les types sont bien respectés et tout ...

merci d'avance

4 réponses

keke4483 Messages postés 17 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 6 mars 2008
2 mars 2008 à 16:43
Ca fait bien longtemps que je n'ai pas de VB mais je dirais que le problème vient du fait que tu n'instancie pas tes classes avant de les utiliser.

'cree mon tablea de type unRadio
Dim lesRadioFav(10) As uneRadio
dim index as integer
For index = 0 To 10
    lesRadioFav(index) = new uneRadio()
    lesRadioFav(index).create(56.5, "AM", "description")
Next

Bon courage
-=KeKe4483=-
3
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
4 mars 2008 à 05:18
Salut zebiker,

Bon début, mais apparement tu as "hérité" de qq techniques venant d'un autre langage

1° Ta function 'create'
A priori elle ne sers pas à grand chose dans ton cas. Pour instancier une classe uneRadio tu vas utiliser son constructeur, dans lequel tu va passer les arguments adéquats. La fonction create peut tout de même être utile lorsque tu voudra changer les données de ta radio (frequ, ...) déjà instancié dans une autre partie du code, mais tu pourra tout aussi bien utiliser ses propriétés pour le faire (voir la suite).
De plus, tu aura un warning, car une fonction doit retourner une valeur. (il faut faire une Sub si tu ne veux pas qu'elle retourne de valeur)

2° Tes 'accessors'
Pour retourner une valeur, il vaut mieux utiliser des propriétés et non des fonctions:
Public Property laFrequency() as Double  
    Get
        Return frequency
    End Get
    Set(Value as Double)
       frequency = Value
    End Set
End Property
ou comme ceci si tu la veux en lecture seule:
Public ReadOnly Property laFrequency() as Double  

    Get

        Return _frequency

    End Get
End Property
Enfin, il faut déclarer le type de tes fonctions:
Public Function laFrequency() as Double
Car sinon elle retourne un Object (type par défaut)

3° Fonction Shared
Il est possible que ton erreur venait de là. Tu peux utiliser une fonction quelconque (create par exemple) qui te créé une instance de ta classe et te la retourne. Dans ce cas, on la déclare Shared.
Shared Function create(ByVal Lafreq As Double, ByVal Lemode As String, ByVal ladesc As String) as uneRadio
    Return New uneRadio(Lafreq, Lemode, ladesc)
End Function
Et on l'utilise de cette façon (sans utiliser le constructeur):
lesRadioFav(index) = uneRadio.create(56.5, "AM", "description")
Ceci n'est pas utile dans la plupart des cas, mais il faut savoir que ça existe.

4° Autres remarques
Lorsque tu déclare un constructeur qui possède des arguments, le
constructeur par défaut (constructeur sans argument) n'est plus créé et
n'est donc plus utilisable. Si tu veux avoir un constructeur sans
argument et un autre avec des arguments, il faut explicitement les
déclarer les deux:
Public Sub New(Arg1 as Integer, Arg2 as Integer)

    ...

End Sub

Public Sub New()

    ...

End Sub
Dans ton cas tu ne peux donc pas instancier une classe uneRadio de cette façon:
Dim laRadio =new uneRadio()

Voilà, espérant que ca t'aide pour la suite
3
zebiker Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 12 novembre 2008
2 mars 2008 à 16:53
S U P E R !!
merci beaucoup
j'étais sur qu'il en fallait peu mais bon, il faut bien commencer un jour !

Bonne continuation et encore merciiiiiiiiiiiiiiii !!!
0
zebiker Messages postés 34 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 12 novembre 2008
4 mars 2008 à 13:19
okies merci beaucoup aussi à toi kevin, j'avais quelques bases de Java (mais j'avais pas écouté en cours, ce que je regrette maintenant)

Tout marche nikel, j'ai modifié comme tu me l'as expliqué.
Ce qui me manquait c'était des explication claires, car des exemples simple j'en ai pas trouvé beaucoup sur le net ...

Merci d'avoir pris le temps d'écrire tout ca !
bonne continuation
Florian
0
Rejoignez-nous