Bonjour,
J'ai une classe truc et une classe bidule.
Je voudrais pouvoir faire ceci:
Bref, je voudrais caster bidule en truc. Il y a moyen ?Code:
1
2 bidule b = new bidule(); truc t = (truc)b;
merci.
Version imprimable
Bonjour,
J'ai une classe truc et une classe bidule.
Je voudrais pouvoir faire ceci:
Bref, je voudrais caster bidule en truc. Il y a moyen ?Code:
1
2 bidule b = new bidule(); truc t = (truc)b;
merci.
Si bidule hérite de truc, il n'y a aucun souci à utiliser ton code. Par contre, si le lien est différent de l'héritage, il te faudra implémenter un
Code:
1
2 ... truc t = b.ToTruc();
Il y a pas moyen de créer un casting automatique comme en C++ ?
Hello,
oui, tu dois pouvoir redéfinir les casts explicites et implicites en faisant quelque chose du genre :
En précisant les types bien sûr.Code:
1
2
3
4
5
6
7
8
9
10 public static implicit operator ...(...) { return ...; } public static explicit operator ...(...) { return ...; }
Le cast implicite autorise une affectation directe d'un type à l'autre, alors que le cast explicite requert l'opérateur de conversion ' (newtype) '.
Bonne chance
C# est fortement typé et ne supporte pas les innombrables bidouilles que permettait c++ sous win32.Citation:
Envoyé par bilb0t
Tu ne peux caster que s'il y a un lien réel de parenté entre les classes, et c'est plutôt une bonne chose.
Après, comme cela a été dit dans le thread, tu peux implémenter des conversions explicites ou implicites par la surcharge des opérateurs dans tes classes.
Mais le "transtypage sauvage" comme cela se pratiquait sous win32 avec c++ ou d'autres langages comme Delphi, il faut oublier..
ok, merci. On est bien d'accord. Je cherchait juste à créer des casting explicite et implicite comme ciré plus haut...Citation:
Envoyé par Merlin
Quel genre de transtypage sauvage en C++ ?Citation:
Envoyé par Merlin
C'est tout aussi typé que C#, il faut aussi faire des opérateurs de conversion explicites pour convertir n'importe quoi en n'importe quoi. C'est pas du VB :)
Il y a davantage de conversions implicites entre les types de base, mais je vois mal comment tu peux passer d'une classe A à une classe B en C++ sans héritage ni opérateur :)
(mais ce sont peut-être mes souvenirs de C++ qui deviennent flous :)
oui, tes souvenirs doivent être flous :-)Citation:
Envoyé par Maniak
par exemple ça c'est possible, et c'est du transtypage sauvage :
(je ne mets pas la balise code pour ne pas donner trop d'importance visuelle à ce bout de code qui est un peu hors sujet du thread)Citation:
Envoyé par anecdote
Possible oui, mais là c'est un bug avec des effets secondaires qui peuvent être variables vu qu'on ne sait pas où ça va taper :)Citation:
Envoyé par Merlin
Pour moi le transtypage dont tu parlais, c'était d'un état valide vers un autre état valide, en passant d'un type à l'autre sans qu'il y ait un rapport entre les deux.
Les bidouilles sur les pointeurs qui peuvent aller taper n'importe où sans se poser de questions, c'est autre chose :)
Accessoirement, là c'est du C. Est-ce que tu peux faire pareil avec les *_cast du C++ ? :)