Il est possible en C# de définir comment doit s'opérer une conversion implicite et comment doit s'opérer une conversion explicite entre deux objets de types différents.
Pour cela, on utilise les opérateurs de conversion :
public static implicit operator conv-type-out ( conv-type-in operand )
public static explicit operator conv-type-out ( conv-type-in operand )
Exemple :
public static explicit operator double(Fraction f)
{
return (double)f.num / f.den;
}
[...]
Fraction f = new Fraction(3, 5);
double d = (double) f;
Attention, post sans grande prétention :) sinon celle de rappeler un petit truc élémentaire.
try
{
[...] // Code susceptible de lever une exception
}
catch
{
[...] // Traitement de l'exception
throw; // On lève l'exception qu'on vient de récupérer pour la faire remonter plus haut
}
Imaginons une interface IDriveable (c'est l'exemple pris dans le Kit de Formation C# Winforms) :
public interface IDriveable
{
void MoveForward();
}
On veut créer une classe Car qui implémente l'interface IDriveable, nous avons deux manières de procéder :
- Implémentation 1 -
public class Car : IDriveable
{
public void MoveForward()
{
}
}
ou
- Implémentation 2 -
public class Car : IDriveable
{
public void IDriveable.MoveForward()
{
}
}
Quelle est la différence entre ces 2 implémentations de Car ?
Dans la deuxième implémentation, la méthode MoveForward ne sera accessible que quand l'object de classe Car sera casté en IDriveable :
Car porsche = new Car();
// porsche.MoveForward(); n'est pas possible
IDriveable porsche2 = porsche;
porsche2.MoveForward(); // Là, c'est possible
Il est surement arriver à certains de chercher une méthode dans une description de classe sans la trouver alors qu'ils étaient persuadés avoir déjà vu cette méthode dans cette classe. Beaucoup des classes du framework ont été codées en utilisant la 2e implémentation. Maintenant on sait où se trouvent les méthodes invisibles :)
Bonjour à tous,
Je suis en train de compléter mes connaissances en .NET afin de passer les certifications nécessaires à l'obtention du titre MCSD de Microsoft.
J'apprends énormément grâce aux kits de formation et aux MOC. Je vais m'efforcer de publier ici les trucs et astuces que je juge les plus utiles.
En espérant que cela puisse servir à quelqu'un,
Aymeric.
