Shadows vs Overrides

alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 - 29 nov. 2006 à 10:12
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 - 29 nov. 2006 à 15:32
bonjour, 

imaginons 3 classes : C0, C1 (qui est dévivée de C0) et C2 (qui est dévivée de C1).

si j'ai bien compris, la difference principale entre "Shadows" et "Overrides" ce situe au niveau de l'hériatge.
si dans C1 j'"Overrides" 1 procedure et que j'en "Shadows" 1 seconde :
=> la procedure Overridée aurait la meme definition dans C2 que C1 mais pas que dans C0
=> la procedure Shadowée aurait la meme definition dans C2 que C0 mais pas que dans C1

suis-je dans le vrai ou n'ai rien compris ?

 merci a vous,

alonsyl

2 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
29 nov. 2006 à 12:34
Bonjour

Overrides permet de "recoder" une méthode d'une classe parente, tandis que Shadows "casse" l'héritage :


Si B hérite de A :


Dans B :

Overrides function ToString(...) as ...


Lors de l'appel sur une variable déclarée B, le ToString de B s'execute.

Lors de l'appel sur une variable déclarée A, le ToString de B s'execute.


Alors que


Dans B :

Shadowss function ToString(...) as ...



Lors de l'appel sur une variable déclarée B, le ToString de B s'execute.


Lors de l'appel sur une variable déclarée A, le ToString de A s'execute.

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
29 nov. 2006 à 15:32
Mmh, je suis pas d'accord, Overrides ne modifie rien dans la classe parente.
Exemple :

Public Class Form1

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim y As New Yop, lbl As New Label
MsgBox(y.ToString() & " " & lbl.ToString)
End Sub
End Class

Public Class Yop
Inherits Windows.Forms.Label

Private Overrides Function ToString() As String
Return "Yopyop"
End Function
End Class

Ce code affichera "Yopyop System.Windows.Forms.Label, Text:"
Le code du ToString du Label est bien conservé et exécuté !

La différence est autre part : http://msdn2.microsoft.com/fr-fr/library/c4swkw24(VS.80).aspx


Julien.
0
Rejoignez-nous