Getsuyodev, Programming is mainly used when constructing an application. Programming requires knowledge of application domains, algorithms, and programming language expertise. Programming can be developed in different logic based on developer knowledge.

C Sharp – Transtypage utilisateur

Programmation en C# (C Sharp)



C# autorise l’utilisation de 2 genres transtypages de type prédéfinis ou d’objet dans une hiérarchie d’héritage le transtypage implicite et le transtypage explicite ( il faut dans ce dernier cas utiliser l’opérateur (…)  ).

Transtypage explicite dans un héritage :
clA x = new clB( );

clB y = (clB) x;

Transtypage implicite d’un int en float :
int x = 10;
float y = x; 

L’utilisateur peut définir lui-même sur ses types des opérateurs static de transtypages implicites ou bien explicites; il dispose pour cela des mots clefs implicit et explicit selon les modèles ci-après :

static implicit operator type_résultat ( type_source variable ) { ... }
static explicit operator type_résultat ( type_source variable ) { ... }

Dans l’exemple à étudier on définit 2 types “struct CouleursExpl” et “struct CouleursImpl” de fréquence de couleur fondés chacun sur un type enum :

Dans le type CouleursExpl, on définit un opérateur de transtypage explicite (conversion explicite) d’une nombre entier représentant une fréquence en la couleur correspondante.

Dans le type CouleursImpl, on définit un opérateur de transtypage implicite (conversion implicite) d’une nombre entier représentant une fréquence en la couleur correspondante.


using System;


enum freqColor 
{
noir, violet=100, bleu=500, vert=1200, jaune=2500, orange=3000, rouge=5000 
}// en fait noir = 0

struct CouleursExpl // premier type de couleur associée à une fréquence
{
public freqColor frequence;
public CouleursExpl(freqColor valfreq)
{
frequence = valfreq;
}
public static explicit operator CouleursExpl(int val)
{
if (val == 100 | val == 500 | val == 1200 | val == 2500 | val == 3000 | val == 5000)
return  new CouleursExpl((freqColor)val);
else
return  new CouleursExpl(freqColor.noir);
}

}

struct CouleursImpl // second type de couleur associée à une fréquence
{
public freqColor frequence;
public CouleursImpl(freqColor valfreq)
{
frequence = valfreq;
}
public static implicit operator CouleursImpl(int val)
{
if (val == 100 | val == 500 | val == 1200 | val == 2500 | val == 3000 | val == 5000)
return new CouleursImpl((freqColor)val);
else
return new CouleursImpl(freqColor.noir);
}
}

class Exercice
{
public static void Main(string[ ] args) // Méthode principale de lancement de l'exécution
{
// objectifs : convertir implicitement et explicitement des entiers en couleurs
int a = 100;
Console.WriteLine("----- explicit -----");
CouleursExpl CoulExpl = (CouleursExpl)a;
Console.WriteLine(CoulExpl.frequence);
CoulExpl = (CouleursExpl)2500;
Console.WriteLine(CoulExpl.frequence);
CoulExpl = (CouleursExpl)( (int)freqColor.noir );
Console.WriteLine(CoulExpl.frequence);
CoulExpl = (CouleursExpl)800;
Console.WriteLine(CoulExpl.frequence);

// on peut utiliser explicitement un opérateur implicite :
Console.WriteLine("----- implicit utilisation explicite -----");
CouleursImpl CoulImpl = (CouleursImpl)a;
Console.WriteLine(CoulImpl.frequence);
CoulImpl = (CouleursImpl)2500;
Console.WriteLine(CoulImpl.frequence);
CoulImpl = (CouleursImpl)((int)freqColor.noir);
Console.WriteLine(CoulImpl.frequence);
CoulImpl = (CouleursImpl)800;
Console.WriteLine(CoulImpl.frequence);

// on peut utiliser implicitement un opérateur implicite :
Console.WriteLine("----- implicit utilisation implicite -----");
CoulImpl = a;
Console.WriteLine(CoulImpl.frequence);
CoulImpl = 2500;
Console.WriteLine(CoulImpl.frequence);
CoulImpl = (int)freqColor.noir;
Console.WriteLine(CoulImpl.frequence);
CoulImpl = 800;
Console.WriteLine(CoulImpl.frequence);

Console.ReadLine();
}
}



Comments are closed, but trackbacks and pingbacks are open.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More