Visual Basic .NET Language
Mots-clés OOP
Recherche…
Définir une classe
Les cours sont des aspects essentiels de la POO. Une classe est comme le "plan" d'un objet. Un objet possède les propriétés d'une classe, mais les caractéristiques ne sont pas définies dans la classe elle-même. Chaque objet pouvant être différent, ils définissent leurs propres caractéristiques.
Public Class Person
End Class
Public Class Customer
End Class
Une classe peut également contenir des sous-classes . Une sous-classe hérite des mêmes propriétés et comportements que sa classe parente, mais peut avoir ses propres propriétés et classes.
Modificateurs d'héritage (sur les classes)
Héritiers
Spécifie la classe de base (ou parent)
Public Class Person
End Class
Public Class Customer
Inherits Person
End Class
'One line notation
Public Class Student : Inherits Person
End Class
Objets possibles:
Dim p As New Person
Dim c As New Customer
Dim s As New Student
Non Héritable
Empêche les programmeurs d'utiliser la classe en tant que classe de base.
Public NotInheritable Class Person
End Class
Objets possibles:
Dim p As New Person
MustInherit
Spécifie que la classe est destinée à être utilisée comme classe de base uniquement. (Classe abstraite)
Public MustInherit Class Person
End Class
Public Class Customer
Inherits Person
End Class
Objets possibles:
Dim c As New Customer
Modificateurs d'héritage (sur les propriétés et les méthodes)
Irrégulable
Permet à une propriété ou à une méthode d'une classe d'être remplacée dans une classe dérivée.
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Remplace
Substitue une propriété ou une méthode Overridable définie dans la classe de base.
Public Class Customer
Inherits Person
'Base Class must be Overridable
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
NotOverridable
Empêche une propriété ou une méthode d'être remplacée dans une classe héritée. Comportement par défaut Ne peut être déclaré que sur les méthodes de remplacement
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public NotOverridable Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Public Class DetailedCustomer
Inherits Customer
'DoSomething can't be overridden
End Class
Exemple d'utilisation:
Dim p As New Person
p.DoSomething()
Dim c As New Customer
c.DoSomething()
Dim d As New DetailedCustomer
d.DoSomething()
Sortie:
Person
Customer
Customer
MustOverride
Exige qu'une classe dérivée remplace la propriété ou la méthode.
Les méthodes MustOverride doivent être déclarées dans les classes MustInherit.
Public MustInherit Class Person
Public MustOverride Sub DoSomething()
'No method definition here
End Class
Public Class Customer
Inherits Person
'DoSomething must be overridden
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Exemple d'utilisation:
Dim c As New Customer
c.DoSomething()
Sortie:
Customer
MyBase
Le mot clé MyBase se comporte comme une variable objet faisant référence à la classe de base de l'instance actuelle d'une classe.
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public Sub DoSomethingElse()
MyBase.DoSomething()
End Sub
End Class
Exemple d'utilisation:
Dim p As New Person
p.DoSomething()
Console.WriteLine("----")
Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()
Sortie:
Person
----
Person
Person
Moi vs MyClass
Me utilise l'instance d'objet en cours.
MyClass utilise la définition de membre dans la classe où le membre est appelé
Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub useMe()
Me.DoSomething()
End Sub
Public Sub useMyClass()
MyClass.DoSomething()
End Sub
End Class
Class Customer
Inherits Person
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Exemple d'utilisation:
Dim c As New Customer
c.useMe()
c.useMyClass()
Sortie:
Customer
Person
Surcharge
La surcharge est la création de plusieurs procédures, constructeurs d'instance ou propriétés dans une classe avec le même nom mais différents types d'arguments.
Class Person
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
End Class
Ombres
Il redéfinit un membre qui n'est pas remplaçable. Seuls les appels à l'instance seront affectés. Le code à l'intérieur des classes de base ne sera pas affecté par ceci.
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub UseMe()
Me.DoSomething()
End Sub
End Class
Public Class Customer
Inherits Person
Public Shadows Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Exemple d'utilisation:
Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()
Sortie:
Person
Person
----
Person
Customer
Pièges :
Example1, Créer un nouvel objet via un générique. Quelle fonction sera utilisée ??
Public Sub CreateAndDoSomething(Of T As {Person, New})()
Dim obj As New T
obj.DoSomething()
End Sub
exemple d'utilisation:
Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()
Sortie: Par intuition, le résultat devrait être le même. Pourtant, ce n'est pas vrai.
Person
Student
----
Person
Person
Exemple 2:
Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()
Résultat: Par intuition, vous pourriez penser que p et s sont égaux et se comporteront de la même manière. Pourtant, ce n'est pas vrai.
Person
Student
Dans ces exemples simples, il est facile d'apprendre le comportement étrange de Shadows. Mais dans la vraie vie, cela apporte beaucoup de surprises. Il est conseillé d'éviter l'utilisation des ombres. On devrait utiliser d'autres alternatives autant que possible (dérogations, etc.)
Interfaces
Public Interface IPerson
Sub DoSomething()
End Interface
Public Class Customer
Implements IPerson
Public Sub DoSomething() Implements IPerson.DoSomething
Console.WriteLine("Customer")
End Sub
End Class