Création de classe - surcharge méthode avec début signature identique
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDernière intervention 4 septembre 2011
-
14 nov. 2009 à 13:58
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDerniè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 ?
ricky84
Messages postés44Date d'inscriptiondimanche 8 septembre 2002StatutMembreDernière intervention13 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 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
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDerniè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.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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