Méthode par défaut [C#] - C#/.NET managed - Programmation
Marsh Posté le 06-01-2005 à 12:10:02
Ben un appel à Console.Write(monObj); fait automatiquement appel à ToString, non ? a vérifier...
Marsh Posté le 06-01-2005 à 12:14:55
Non, ça c'est parceque "ToString()" en interne est spécifié comme méthode par défaut. Et sur un objet perso, ça retourne le type de l'objet. Je sais pas si ça supporte la surcharge par contre. Mais dans tous les cas, je péfèrerais si possible avoir une propriété "à moi" par défaut, et non pas modifier celle de base du framework.
Marsh Posté le 06-01-2005 à 12:16:25
Ben si t'as juste besoin de ToString, laisse comme ça. Sinon, je sais pas si c'est possible Pour une propriété c'est faisable, mais pour une méthode, je sais pas...
Marsh Posté le 06-01-2005 à 13:54:42
En VB c'est comme ça, mais ça doit pas trop changer en écharpe :
Code :
|
Note qu'il faut un paramètre pour la propriété. Une propriété par défaut en fait sera utilisée comme ça :
Code :
|
Au lieu de :
Code :
|
Marsh Posté le 09-01-2005 à 21:47:42
ben tu surcharges le ToString de ta classe pour qu'il t'affiche ce que tu veux.
Marsh Posté le 10-01-2005 à 02:06:32
C'est ce que j'ai fait, mais j'aurais préféré avoir un comportement comme ça :
XMLSimpleTag monTag;
monTag.tag = "toto";
monTag.value = "titi";
Console.Write(monTag);
=> "<toto>titi</toto>"
(avec une class héritée de String, ça aurait marché, sauf que je n'arrive pas à faire appeler par défaut ce "ToString()"
C'est pourtant bien le cas pour le type "int". Il ne nécessite pas de cast lorsqu'on l'appelle, preuve qu'une méthode par défaut est bien appelée, et que cette dernière à une surcharge pour un type en sortie "string". Du moins, c'est comme ça que j'interprète le fonctionnement de ce type.
Marsh Posté le 10-01-2005 à 02:10:23
En fait, d'ailleurs, je ne sais pas pourquoi je vous ai parlé de class "XMLTag". A la base, c'est un type "SQLString" que je veux faire, qui permette d'échapper automatiquement les quotes en vue de passer les données à une requête.
Comme ça, toutes mes fonctions contenant des traîtements SQL seraient comme ça :
public void doSomething(XMLString val)
{
string sql;
sql = "select * from latable where champ = " + val;
}
=> Du coup, je ne nuit pas à la lecture avec des ' et des Replace foutus dans tous les sens.
Marsh Posté le 11-01-2005 à 17:19:27
J'ai surchargé le ToString finalement...
Ca marche pas trop mal :
Code :
|
Code :
|
Marsh Posté le 06-01-2005 à 12:09:01
Imaginons un truc simple.
Je veux créer une class mettons "XMLSimpleTag", avec un constructeur prenant en paramètre le nom du tag et son contenu.
Ensuite, au lieu de faire un :
XMLSimpleTag monObj = new XMLSimpleTag("tag", "value" );
Console.Write(monObj.ToString());
=> "<tag>value</tag>"
Je veux pouvoir écrire simplement :
XMLSimpleTag monObj = new XMLSimpleTag("tag", "value" );
Console.Write(monObj);
Et obenir le même résultat.
Comment faire ?
Actuellement, j'ai fait un truc goret :
public string value
{
get
{
return ...;
}
}
Ca à l'air de compiler, mais à cause de références merdiques qui ne dépendent pas de moi, je ne peux pas aller jusqu'au bout de la compilation.