Classe base
DECLARATION
è Classe base
Public
Class nomclassebase
End
Class
è Membre
readonlyOn
peut affecter une valeur(et lire) à un attribut readonly depuis sa classe Mais les instances de la classe en aucun cas ne peuvent y affecter une valeur, mais peuvent lire par contre
è Membre
writeonlyOn
peut lire et écrire un membre readonly depuis sa classe Mais en aucun cas les instances de la classe peuvent lire la valeur de ce membre, ma
is peuvent y affecter une valeur par contre
è
Shared : attributs et méthodes partagées
Format :
- attribut
Private
Shared _mmembre_partage As String
Public
Shared Property membre_partage() As StringGetmembre_partage = _mmembre_partage
End GetSet(ByVal value As String)_mmembre_partage = value
End SetEnd
Property- méthodes
Public
Shared Function fonction_partagee() As String
Return "oui ok. methode partagee"End
FunctionACCES :
On
peut accéder depuis nimporte ou de lapplication (lecture/écriture) ainsi :o Nomclasse_comportant_membres_partagés.nomaccesseur_partage
o Nomclasse_comportant_membres_partagés.nomméthodepartagée
è Classe dont aucune autre classe ne peut hérité
Friend
NotInheritable Class DepartmentOfMotorVehicles
End
Class
è toString : Fonction permettant de retourner l
ensemble des valeurs des attributs de la classePublic
Overrides Function ToString() As StringReturn"accesseur1: " & accessuer1 & vbCrLf & _"accesseur2: " & accessuer2 & vbCrLf
End
Function
è
sub new : utiliser Me.nomattribut pour différencier attribut de la classe visé et la variable reçueSub
New(ByVal AccountNumber As String)
Me.AccountNumber = AccountNumber
End
Subà passer un paramètre et l
utiliser dans un propertyPublic
Property DefaultQuantity(ByVal Multiplier As Integer) As IntegerGetReturn custDefaultQuantity * MultiplierEnd GetSet(ByVal Value As Integer)custDefaultQuantity = Value
End SetEnd
Propertyè compteur d
instances1 dans
sub new on ajouteSub
New()Nb += 1
End
Sub2
propertyPublic
ReadOnly Property NbInstance()Get
NbInstance = Nb
End GetEnd
Property
è Destructeur
Protected
Overrides Sub Finalize()nominstance =
NothingEnd
SubPour forcer la destruction
on peut utiliser l'interface IDisposable:Il faut mettre dans l
'entête de la classe
o
Implements IDisposable
et mettre dans le code de la classe
Public
Sub Dispose() Implements System.IDisposable.Dispose
' Code...
End
SubC
est une méthode Public, on peut l'appeler de l'application cliente:M.Dispose()
M=
NothingClasse héritée
DECLARATION
Public
Class classeherite_classebase1_1Inherits classebase_1
End
Class-
Inherits nomclassebase- Posséde des attributs et propertys associés qui sont propre à la classe dérivée (c
est la tout lintêret de créer une classe dérivée)
INITIALISATION
- Fait appel dans son constructeur au constructeur de sa classe de base
MyBase.new()Public
Sub New()
MyBase.new()
End
Sub
AFFECTATION
- Une instance de la classe dérivée a accès aussi bien et facilement aux attributs (ou plutôt accesseurs) et méthodes de sa classe de base que de sa classe dérivée
-
On peut accéder aux attributs (ou plutôt aux accesseurs) et aux méthodes de la classe de base directement par leur nom depuis lintérieur de la classe dérivée :o Nomaccesseur_classe_base
o Nommethode_classe_base
§ A la rigueur
on peut ajouter MyBase (MyBase.nom_attribut_classe_base, MyBase.nom_methode_classe_base)- Sinon un objet declaré de la classe derivee (depuis n
importe quel endroit de lapplication) a accés aux attributs ainsi o oClassederivee.nom_attribut_classe_base
o oClassederivee.nom_methode_classe_base()
Public
Class classeherite_classebase1_1Inherits classebase_1
Public Sub New()MyBase.new()
End Sub
End
Classè CAS attributs(accesseurs) et méthodes classe base déclarés en
PROTECTEDLes instances de la classe dérivée n
ont plus accès aux attributs et méthodes déclarées en protectedè
Overloads : permet davoir :- une méthode dans la classe de base et une méthode dans la classe héritée portant le même nom, et ayant le mçeme nombre ou non de paramêtres reçus
- Une instance de la classe de base accédera à la méthode de la classe de base
- Une instance de la classe héritée accedera à la méthode
Overloads de la classe héritée Format : dans la classe de base
Public
Class classe_base_2_pour_overloadProtected attribut_classe_base_1 As StringProtected attribut_classe_base_2 As String
Public Function Register()attribut_classe_base_1 =
"depuis classe base"
Return attribut_classe_base_1End Function
End
Class
Format : dans la classe en héritant
Public
Class classe_heritant_classebase_2_overloadInherits classe_base_2_pour_overload
Public Overloads Function Register() ', ByVal p2 As String)attribut_classe_base_1 =
"depuis classe derivee"'attribut_classe_base_2 = p2
Return attribut_classe_base_1End FunctionEnd
ClassII Classe abrégée et classe héritant d
une classe abrégée (méthodes à implémenter)Classe abrégée
(contenant des méthodes abrégées)
Ce type de classe contient des méthodes abrégées que les classes devront implémentant mais cette classe abrégée peut également avoir des attributs méthodes et constructeur et pas uniquement des méthodes abrégées
DECLARATION
è Classe abrégée
Public
MustInherit Class classe_abregee_1
End
Class
è Méthode abrégée déclarée dans une classe abrégée
Public
MustOverride Function fonction_classe_abregee() As StringClasse héritant de la classe abrégée
DECLARATION
è Classe héritant de la classe abrégée
Public
Class classe_implementant_classe_abregeeInherits classe_abregee_1
End
Classè Méthode implémentant méthode abrégée de la classe abrégée
Public
Overrides Function fonction_classe_abregee() As String
End
Function- Pour accéder aux méthodes implémentées (corps rempli) de la classe héritant de la classe abrégée il suffit de créer une instance de la classe héritant de la classe abrégée pui s :
- Nominstance_classe_heritant_classe_abregee.nom_methode_abregee_implementee()
è Attribut accesseur (
property) devant être implémenté par les classes héritant de la classe abrégéeFormat : dans la classe abrégée
Dans la liste des attributs
Protected
currentValueValue As Decimal
Puis à la place de déclaré complétement le
property correspondant :Public
MustOverride Property CurrentValue() As DecimalFormat : dans la classe implémentant
Public
Overrides Property CurrentValue() As DecimalGetReturn currentValueValueEnd GetSet(ByVal Value As Decimal)
currentValueValue = Value
End SetEnd
PropertyIII
Interface de classe et classe implémentant linterface de classeINTERFACE
DE CLASSEL
interface de classe ne contient que des méthodes abrégées (prototype de méthodes sans le corps) que devront obligatoirement implémentant les classes implémentant cette interface de classePas d
attributs, ni daccesseurs, ni de constructeur
DECLARATION
è
interface de classePublic Interface nom_classe_interface
End Interfaceè méthodes abrégées de l
interface
- format des méthodes abstraites déclarées dans l
interface de classeo
Function fonction_classe_interface_1() As String
Classe implémentant
interface de classeLes classes implémentant (
implements nominterface) ces interfaces de classes peuvent elles par contre posséder des constructeurs ,attributs,autres méthodes et peuvent également en plus hérité dune autre classe (Inherits nomclassebase)
DECLARATION
è Classe implémentant
interface- Format ajouter :
Implements nom_classe_interface
o
Public Class Classe_implemantant_interface_classeImplements
classe_interface
End
Class
- Automatiquement le corps des méthodes que la classe doit implémenter apparaissent
(des prototypes déclarés dans l
interface de classe) apparaissent avec :
Implements
nom_classe_interface.nom_fonction_classe_interface_implémenter
( Montrant que vous implémentez bien cette fonction abrégée )
è Méthodes implémentant méthodes abrégées de l
interface de classe
Public
Function fonction_classe_interface_1() As String Implements classe_interface.fonction_classe_interface_1
End
Function
AFFECTATION
- Pour accéder aux méthodes de la classe implémentant les méthodes abrégées de l
interface de classeIl suffit de créer une instance de cette classe et ensuite
o Nominstance.methode_classe_implementant_interface_classe
IV EVENEMENTS
è le mot clé
handles permet d'associer un événement à une procédure au moment de la conception. (Le concepteur sait qu'une procédure doit gérer les événements).è
AddHandler permet dassocier une procédure de gestion dévênement à un composant créé dynamiquement
1ere méthode (avec
AddHandler monbouton.Click, AddressOf monbouton_clique)
1
on déclare notre composant Dim
monbouton As New System.Windows.Forms.Button2 -
On défini les propriétés de ce composant créé dynamiquement et on lajoute à la form désiréemonbouton.Location =
New System.Drawing.Point(165, 400)monbouton.Size =
New System.Drawing.Size(222, 23)monbouton.Text =
"mon bouton "Me.Controls.Add(monbouton)
3
on créé lEventHandler pour ce composantAddHandler
monbouton.Click, AddressOf monbouton_clique4
on définit la procédure qui traitera lévênementPrivate
Sub monbouton_clique(ByVal sender As System.Object, ByVal e As System.EventArgs)
MessageBox.Show(
"vous avez cliqué sur mon bouton")End
Sub
On
peut également utiliser la même procédure pour plusieurs composantsAddHandler
BT1.Click, AddressOf BoutonCliqueAddHandler
BT2.Click, AddressOf BoutonCliqueOn
détermine le bouton cliquer ainsi dans la procédure de gestion dévênement :If
sender Is BT1 Then . . . 2e
me méthode (avec private WithEvents et Handles composant.évênement)1 déclarer en haut de MainForm
Private
WithEvents monbouton As Button2 définir les propriétés du bouton et ajouter ce bouton à la form
monbouton =
New System.Windows.Forms.Buttonmonbouton.Location =
New System.Drawing.Point(165, 400)monbouton.Size =
New System.Drawing.Size(222, 23)monbouton.Text =
"mon bouton "Me.Controls.Add(monbouton)3- définir la procédure de gestion d
évênementLe plus important c
est Handles monbouton.Click qui définit le composant et lévênement lié
Private
Sub monbouton_clique(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles monbouton.Click
MessageBox.Show(
"vous avez cliqué sur mon bouton")End
Sub
3e
me méthode : évênements de classeDans cet exemple si le texte est différent de « hello » alors l
évênement est déclenché : une boite de dialogue apparait1 dans les déclarations de la classe
Public
Event TextChange(ByVal UserName As String)2 dans la classe > déclenchement de l
évênement défini ci-dessusRaiseEvent
TextChange("hello")3 créer dans la form, deéclarer en haut + M=
new class1 (dans form_load) Private
WithEvents M As Class14 dans la form, ajouter la procédure
Private
Sub M_TexteChange(ByVal UserName As String) Handles M.TextChangemessageBox.show(
"le texte a changé")End
SubØ Code complet de la classe
Public
Class Class1Private _mTexte As String
' Déclare un évènementPublic Event TextChange(ByVal UserName As String)
Public Property Texte()GetReturn _mTexteEnd GetSet(ByVal Value)If Value <> _mTexte ThenRaiseEvent TextChange("hello") '<= déclenchement de l'évènement par RaiseEventEnd If_mTexte = Value
End SetEnd Property
End
ClassV
Shared sub main
APPROCHE OBJET
Public
Class mainPublic Shared Sub main()...
End SubEnd
Class
APPROCHE FONCTIONNNELLE (événementielle)
Module
module1
Sub main()....Créer une instance du formulaire de démarrage et l
'ouvrirEnd Sub
End
Moduleè Conseils
- Créer des méthodes par paire
Ex :
Activation/désactivation.
Ajout/Suppression...
-
Option explicit et strictOption
Strict=On >type de données définis et ce strictementOption
Explicit=On >déclaration obligatoire avant utilisation- Employer des constantes
Const
nomconstante As Integer = 123Ainsi
on utilise la constante au lieu de la valeur, et cela permet de modifier quà un endroit toutes les valeurs
- Namespaces : permettent dans un Assembly d
éviter les conflits si par ex 2 classes ont une méthode de même nomOn
appellera ce qui lève toute ambigüitéo nomespace.nommethode
VI classe simple et classes collections
Classe simple :
- attributs
private + propertys- constructeur,destructeur
- méthodes portant sur un élément
Public
Class websitePrivate _mname As StringPrivate _murl As String
Public Sub New()
End SubPublic Property name() As StringGetname = _mname
End GetSet(ByVal value As String)_mname = value
End SetEnd Property
Public Property url() As StringGeturl = _murl
End GetSet(ByVal value As String)_murl = value
End SetEnd PropertyEnd
Class
Classes collections
-
inherits System.Collections.CollectionBase- constructeur
è Add,insert,Item,removeat
o Add : écriteure à la fin de la collection
o Insert : insertion à l
emplacement spécifiéo Item : lecture
o Removeat : supprimer élément de la collection spécifié
è Méthodes portant sur la collection List
Format :
Public
Class websitesInherits System.Collections.CollectionBase
End
Class
Public
Sub New()
End
Sub
Public
Sub Add(ByVal un_website As website)List.Add(un_website)
End
SubPublic
Sub insert(ByRef index As Integer, ByVal un_website As website)List.Insert(index, un_website)
End
SubPublic
ReadOnly Property Item(ByVal index As Integer) As websiteGetReturn CType(List(index), website)End GetEnd
PropertyPublic
Sub RemoveAt(ByVal index As Integer)List.RemoveAt(index)
End
Sub