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

mioumiounorris Messages postés 57 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 septembre 2011 - 14 nov. 2009 à 13:58
mioumiounorris Messages postés 57 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 septembre 2011 - 19 nov. 2009 à 20:01
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

ricky84 Messages postés 44 Date d'inscription dimanche 8 septembre 2002 Statut Membre Dernière intervention 13 janvier 2014
14 nov. 2009 à 16:08
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
14 nov. 2009 à 16:37
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
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
14 nov. 2009 à 18:06
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
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
14 nov. 2009 à 18:07
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mioumiounorris Messages postés 57 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 septembre 2011
15 nov. 2009 à 10:53
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.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
15 nov. 2009 à 11:06
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
0
mioumiounorris Messages postés 57 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 septembre 2011
19 nov. 2009 à 20:01
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 !
0
Rejoignez-nous