Construire une class dependant d'un autre

Signaler
Messages postés
138
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
2 février 2010
-
Messages postés
138
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
2 février 2010
-
J'aimearis avoir un exemple de class dependante. Comment peux on acceder au information de la class supérieur commeles variable ? Est-ce que les class imbriqué sont la solution ?

10 réponses

Messages postés
15
Date d'inscription
dimanche 5 août 2007
Statut
Membre
Dernière intervention
30 novembre 2010

T'entend quoi par classe supérieur, une classe parent que tu viens d'hériter si c'est le cas tu dois avoir dans un projet par exemple une classe dans une nouvelle classe. Je vais te donner un exemple de classe hériter en te présentant une classe compteBancaire qui contient quelque information d'un compte :

Public

Class CompteBancaire

'Déclaration de variables protected pouvant être lu par les

'classes dérivés et cette classe seulement

Protected aNo
As
Integer

Protected aProprietaire
As
String

Protected aBalance
As
Double = 0

Public
Sub
New()

End
Sub

'Constructeur avec paramètre

Public
Sub
New(
ByVal paramNo
As
Integer,
ByVal paramProprio
As
String,
ByVal paramBalance
As
Double)aNo = paramNo

aProprietaire = paramProprio

aBalance = paramBalance

End
Sub

'Propriétés publique pour accéder aux valeurs des variables et

'pour setter des valeurs aux variables

Public
Property no()
As
Integer

Get

Return aNo

End
Get

Set(
ByVal Value
As
Integer)aNo = Value

End
Set

End
Property

Public
Property proprietaire()
As
String

Get

Return aProprietaire

End
Get

Set(
ByVal Value
As
String)aProprietaire = Value

End
Set

End
Property

Public
ReadOnly
Property balance()
As
Double

Get

Return aBalance

End
Get

End
Property

'Exemple d'un sub qui permettrait de retirer de l'argent au compte

Public
Sub retirer(
ByVal paramMontant
As
Double)aBalance -= paramMontant

End
Sub

'Overridables permet de pouvoir modifier le sub dans les

'classe dérivés

Public
Overridable
Sub deposer(
ByVal paramMontant
As
Double)aBalance += paramMontant

End
SubEnd

ClassVoilà maintenant une classe dérivé qui hérite de cette classe parent qui est donc un compte bancaire, mais disons que pour l'exemple, ce compte bancaire possède un bonus qui est incrémenter de 10 points pour chaque dépot de 100$, c'est une exemple, alors, on peut hériter de compte bancaire pour reprendre ce que la classe possède déjà afin de ne pas réinventer la roue et créer le bonus en supplément dans cette classe, la classe aura accès à tous les attributs de la classe parent ainsi qu'aux méthodes (bien sur, si l'attribut est privé on ne pourra pas le voir) :

Public

Class CompteBancaireBonus

Inherits CompteBancaire

Private aBonus
As
Integer

Public
Sub
New()

End
Sub

'Constructeur avec tous les paramètres comme dans celui plus haut, mais avec compte bancaire en supplément

Public
Sub
New(
ByVal paramNo
As
Integer,
ByVal paramProprio
As
String,
ByVal paramBalance
As
Double,
ByVal paramNbBonus
As
Integer)aNo = paramNo

aProprietaire = paramProprio

aBalance = paramBalance

aBonus = paramNbBonus

End
Sub

'Nouvelle propriété, pas obligé de créer les autres, ils ont déjà été créé dans la classe parent

Public
Property bonus()
As
Integer

Get

Return aBonus

End
Get

Set(
ByVal Value
As
Integer)aBonus = Value

End
Set

End
Property

'On modifie la méthode deposer pour ajouter 10 dans les bonus à

'chaque fois que l'usager dépose plus de 100 $

'C'est un exemple pour modifier une classe parent

'avec le mot clé "Overrides"

Public
Overrides
Sub deposer(
ByVal paramMontant
As
Double)

'Permet d'aller chercher ce qui a déjà été créé dans la classe parent

MyBase.deposer(paramMontant)

If paramMontant > 100
ThenaBonus += 10

End
If

            End
Sub

End
Class
Messages postés
15
Date d'inscription
dimanche 5 août 2007
Statut
Membre
Dernière intervention
30 novembre 2010

Si tu désires accéder à des variables et des méthodes d'un autre projet que tu as créé, tu dois le compiler et prendre la dll obtenu dans le fichier bin.
Ensuite, tu peux ajouter une référence dans ton nouveau projet sur la dll obtenu dans le fichier bin. Ensuite, tu peux utiliser toutes les fontions et les variables publiques qui s'y trouve.

Sinon, si tu veux accéder à une variable ou méthode dans une classe du même projet sans effectuer d'héritage comme j'ai fais plus haut, tu n'as qu'à instancier une nouvelle instance de cette classe et ensuite tu pourra la manipuler comme instance de la classe désirée. Tu pourra donc lui attribué les valeur défini dans ton autre classe ainsi qu'atteindre les méthodes

Exemple : Dans mon exemple, j'ai créér 2 projets sous la même solution pour te donner un exemple de faire une importattion de projet sous une même solution.

Donc, mes classes compteBancaire et compteBancaireBonus se trouve dans la librairie : ClassLibrary1. Je dois donc l'importer pour pouvoir créer des instances de classe que je pourrai manipuler :

'J'importe ma ClassLibrary1 qui contient les classes
Imports ClassLibrary1

Public Class Exemple
'je crée un instance de compteBancaire que j'instancie immédiatement
Private cb As CompteBancaire = New CompteBancaire
'je crée un instance de compteBancaire que je vais instancier plus
'tard à titre d'exemple
Private cbBonus As CompteBancaireBonus

Public Sub attribuerValeur()
'J'attibue mes valeurs à compteBancaire en utilisant
'les méthodes créées dans la classe CompteBancaire
cb.no = 1
cb.proprietaire = "unNom"
'J'utilise une méthode de la classe CompteBancaire
cb.deposer(100)

'J'instancie CompteBancaireBonus
cbBonus = New CompteBancaireBonus
'J'attibue mes valeurs à compteBancaireBonus en utilisant
'les méthodes créées dans la classe CompteBancaireBonus
cbBonus.no = 2
cbBonus.proprietaire = "riche"
'J'utilise une méthode de la classe CompteBancaireBonus
cbBonus.deposer(200)
End Sub
End Class
Messages postés
15
Date d'inscription
dimanche 5 août 2007
Statut
Membre
Dernière intervention
30 novembre 2010

Désolé pour la lisibilité, je reprend :




'J'importe ma ClassLibrary1 qui contient les classes




Imports



ClassLibrary1


Public






Class
Exemple


'je crée un instance de compteBancaire que j'instancie imm‚diatement






Private
cb

As
CompteBancaire =

New
CompteBancaire


'je crée un instance de compteBancaire que je vais instancier plus






'tard … titre d'exemple






Private
cbBonus

As
CompteBancaireBonus


Public



Sub
attribuerValeur()


'J'attibue mes valeurs … compteBancaire en utilisant






'les méthodes créées dans la classe CompteBancaire

cb.no = 1


cb.proprietaire =




"unNom"






'J'utilise une méthode de la classe CompteBancaire

cb.deposer(100)







'J'instancie CompteBancaireBonus

cbBonus =




New
CompteBancaireBonus


'J'attibue mes valeurs … compteBancaireBonus en utilisant






'les méthodes créées dans la classe CompteBancaireBonus

cbBonus.no = 2


cbBonus.proprietaire =




"riche"






'J'utilise une méthode de la classe CompteBancaireBonus

cbBonus.deposer(200)







End



SubEnd





Class
Messages postés
138
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
2 février 2010

Ce n'est pas exactement ce que je veux faire.


Example :
Public
ClassMain










Private _UserId As


Integer

Public
Sub
New ( ByVal Par AsInteger )
....
EndSub




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



Dans ce cas les deux class sont imbriqué il y a-t-il un moyen de remonter la hiéarchie pour accéder à la variable userId à partir de la class NestedClass ???

Myke
Messages postés
15
Date d'inscription
dimanche 5 août 2007
Statut
Membre
Dernière intervention
30 novembre 2010

Selon ton exemple, il y aurait moyen d'insatncier une nouvelle classe Main et d'aller chercher les valeur de la variable en ajoutant un accesseur dans la classe Main, soit une property :

Public

Class Main

Private aUserId
As
Integer

Public
Sub
New(
ByVal Par
As
Integer)

End
Sub

Public
ReadOnly
Property Nested()

Get

Return
New NestedClass

End
Get

End
Property

'Ajout d'une propriété pour accéder et attribuer

'des valeurs à aUserId

Public
Property UserId()
As
Integer

Get

         Return aUserId

End
Get

Set(
ByVal Value
As
Integer)         aUserId = Value

End
Set

End
Property

REM - Class Nested

Friend
Class NestedClass

         Public
Sub GetElement()

                  'instanciation de la classe

                  Dim test
As Main =
New Main(1)

                  Dim chercherUserId
As
Integer = 100

                  'J'attribue une valeur à la variable aUserId                  test.UserId = chercherUserId

                  'Je vais chercher la valeur de la variable aUserId                  chercherUserId = test.UserId()

         End
Sub

End
ClassEnd

Class

S'il y a quoi que ce soit, fais moi signe
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour

Remarque :
PublicReadOnlyProperty Nested()

Pense à mettre Option Explicit à On dans les propriétés de ton projet, c'est plus propre et plus rapide.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
138
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
2 février 2010

Myke
Messages postés
138
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
2 février 2010

Myke
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour

Décidément

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
138
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
2 février 2010

NHenry j'aurai bien aimé j'ai posé une question à ce sujet :

www.vbfrance.com/infomsg_TYPE-PROPRIETE-DANS-CLASS-IMBRIQUE_993226.aspx

Myke