Création de classe - surcharge méthode avec début signature identique

Signaler
Messages postés
57
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
4 septembre 2011
-
Messages postés
57
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
4 septembre 2011
-
Bonjour !
J'essaye actuellement de créer ma première classe pour me mettre à la POO.
Je comprends le principe de base, et j'ai déjà défini mes variables internes et mes propriétés publiques avec mes accesseurs et mutateurs.

Ensuite j'essaye d'écrire mes méthodes. Je lis dans les tutos que je peux surcharger mes méthodes avec des signatures différentes. Ok, je comprends aussi, car je me souviens que quand j'utilise par exemple "DrawRectangle" de GDI+, j'utilise parfois une signature différente.

J'essaye alors de prendre exemple pour écrire les différentes surcharges de ma méthode à moi ... exemple:

Public Overloads Sub MyMethod(ByVal X1 As Integer, ByVal Y1 As Integer, ByVal Width As Integer, ByVal Height As Integer)
    'code
End Sub

Public Overloads Sub MyMethod(ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer)
    'code
End Sub


Et là j'ai une jolie erreur me disant que "ma méthode a plusieurs définitions comportant des signatures identiques."
Je comprends bien que c'est à cause des paramètres "X1" et "X2" qui sont présents dans les deux, mais comment ils font par exemple GDI avec leur méthode "DrawRectangle" ???

Quand je lis ses différentes surcharges, je vois bien des paramètres avec le même nom au début !! Par exemple plusieurs signatures demandent le "Pen", le X du point haut gauche en Integer, et son Y.

Comment puis-je faire la même chose ? Je n'ai pas trouvé d'exemple dans les tutos.

Deuxième petite question. Comment puis-je commenter mes méthodes et propriétés de façon à avoir un descriptif des méthodes quand je les utilise dans mon code en les survolant avec le curseur de la souris ?

Merci d'avance

7 réponses

Messages postés
44
Date d'inscription
dimanche 8 septembre 2002
Statut
Membre
Dernière intervention
13 janvier 2014

Essaie de mettre Width et Height d'un autre type que Integer, Single par exemple car sinon, les 2 procédures ont la meme signature, donc, ça peut pas aller

Pour avoir la description des procédures, il faut les faire précéder de ça:

''' <summary>
''' Informe sur l'etat du fichier
''' </summary>
''' <returns>True si le fichier est ouvert</returns>
''' <remarks></remarks>
public Function EstOuvert as boolean
'ici le code de la fonction
end Function
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
La signature de ta 1ere méthode est MyMethod(Integer, Integer, Integer, Integer)
La signature de la seconde est MyMethod(Integer, Integer, Integer, Integer)

Les signatures sont bien identiques !!!!

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
16
Salut,

Les signatures ne dépendent pas du nom des arguments, mais de leurs type

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
16
De plus utilise un overload lorsque ta fonction héritée doit être modifier (celle ayant une signature identique à l'original), sinon rien ne t'oblige à noter overload


Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
Messages postés
57
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
4 septembre 2011

Merci pour votre coup de main messieurs

Impeccable pour les commentaires des méthodes ... ça va être bien pratique ça !

Et pour les signatures identiques, j'avais bien remarqué qu'elles étaient de même type et c'est justement voulu. J'ai testé en changeant X1 et Y1 en type Double dans la deuxième et ça fonctionne, mais bon ... comment je fais moi si je veux bien deux premiers paramètres en Integer ?!?!

Pourtant quand je regarde les signatures de certaines méthodes de classes du framework, j'en vois bien des presques identiques !

Quand on regarde mes deux méthodes persos, on voit que c'est deux façons de dessiner un cercle. En général DrawEllipse a besoin d'un point de départ, de la taille et de la hauteur, mais moi j'avais besoin de remplacer la taille par un deuxième point ... d'où les deux signatures différentes.

Mais du coup, les deux premiers paramètres (X1 et Y1) ne doivent pas changer de type ! et je me retrouve avec 4 Integer dans les deux
Si je change les deux premiers paramètres (x1 et Y1) en type Double ... oui ça marche ... mais c'est pas ce que je veux.

J'ai bien aussi la solution de faire deux méthodes nommées différemment, mais c'est pas le but non plus de la manip.

En tous cas merci pour votre aide.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
j'en vois bien des presques identiques !

Presque oui, mais pas identique. Il y a toujours quelque chose qui diffère car sinon le CLR ne peut pas identifier quelle surcharge utiliser.


Pour tes histoires de points, au lieu de passer les coordonnées X et Y, tu pourrais très bien passer un (ou 2 dans le cas présent) objet Point qui, lui, contient les coordonnées X et Y.

Tu pourrais aussi imaginer passer un objet Point et un objet Size en paramètre.
Je ne comprend d'ailleurs pas pourquoi la méthode DrawRectangle n'a pas été écrite ainsi

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
57
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
4 septembre 2011

Salut casy.
Exact pour le Point au lieu du X et Y ... c'est sûrement ce que je vais faire.

En tous cas, merci pour votre aide !