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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow