Articles taggés C#

[C#] Les méthodes d’extension

7

Les méthodes d’extension sont des choses très pratique que j’utilise bien souvent depuis que je les ai découvertes !! Elles permettent en fait de définir des méthodes venant s’ajouter à des types déjà existants (string, double, ou n’importe quel objet) sans avoir à venir modifier les dits objets (qui peuvent parfois être décrit dans le framework, d’où l’intérêt de ces méthodes d’extension).

Comme je trouve que les exemples concrets (pléonasme ?) sont beaucoup plus parlants que de longs discours théoriques barbants, allons-y ! Imaginons une méthode permettant de convertir des kilomètres en miles. Cette méthode statique serait placé dans une classe ici nommé DataTreatement. Voilà la méthode :

public class DataTreatment
{
   public static double KmToMiles(double _value)
   {
        //Convertion en Miles
        // 1 kilommeter = 0.621371192 miles
        _value *= 0.621371192;
 
        return _value;
    }
}

Pour l’utiliser, il faudrait alors écrire :

static void Main(string[] args)  
{  
        double _nbKm = 10;
 
        Console.WriteLine("Aujourd'hui Dora a parcourue " + _nbKm.ToString() + "Kms, soit " + DataTreatment.KmToMiles(_nbKm) + " Miles pour retrouver sa maison :/");
}

Rien de bien sorcier, sauf que je ne suis pas trop satisfait car  :

DataTreatment.KmToMiles(_nbKm)

Ça manque un peu de lisibilité à mon gout (je suis un peu maniaque je sais). Ce que je voudrais c’est une méthode un peu semblable à ToString() qui me permette d’afficher mes Kilomètres transformés en Miles, en faisant tout simplement :

static void Main(string[] args)  
{  
        double _nbKm = 10;
 
        Console.WriteLine("Aujourd'hui Dora a parcourue " + _nbKm.ToString() + "Kms, soit " + _nbKm.KmToMiles() + " Miles pour retrouver sa maison :/");
}

Et bien avec les méthodes d’extension c’est possible (ZOMFG comme de par hazard !) \o/

Alors comment qu’on procède ? Commençons par créer une classe static que l’on nommera “ExtensionMethods”

Dans cette classe on va pouvoir ajouter toutes les méthodes d’extension que l’on souhaite. Ces méthodes pourrons bien sûr agir sur des types différents (string, double…)

Ensuite, on créé notre méthode comme ceci :

2
3
4
5
6
7
8
9
10
11
12
13
14
    /// <summary>
    /// retourne une chaine contenant la valeur en miles du double kilométre donné, en limitant à deux chiffres après la  virgule
    /// </summary>
    /// <param name="_value"></param>
    /// <returns></returns>
    public static string KmToMiles(this double _value)
    {
        //Convertion en Miles
        // 1 kilommeter = 0.621371192 miles
        _value *= 0.621371192;
 
        return String.Format("{0:00.##}", _value);
    }

Vous remarquerez que la seule chose qui change entre mes deux méthodes se situe au niveau des paramètres avec le mot clef important, j’ai nommé le “this” :

public static string KmToMiles(this double _value)

Le “this” va permettre de préciser que le paramètre ne devra pas être utilisé comme un paramètre normal, mais devra transformer cette méthode en une méthode appartenant au type du paramètre en question (ici la class double). Nous permettant d’écrire :

 _nbKm.KmToMiles()

Vous noterez que le paramètre n’est du coup plus présent lors de l’utilisation de la méthode (à cause du this).

Il faudra quand même penser à ajouter le using correspondant :

using ExtensionMethods;

Voilà, vous verrez c’est vraiment très pratique, car cela nous permet de “surcharger les classes du framework” très simplement et améliore grandement la lisibilité du code et donc la maintenabilité (pensez à remplir le summary afin que tout le monde puisse facilement utiliser votre méthode) !

[C#] Utilisation de l’opérateur ? (opérateur ternaire/conditionnel)

0

L’opérateur ternaire (aussi appelé opérateur conditionnel) vous connaissez ? Il s’utilise avec le point d’interrogation et permet en gros d’écrire des tests sur une seule ligne. Et il peut s’avérer parfois très pratique ! Démonstration :

conditionA  ?  retourTrue  :  retourFalse;

Si la conditionA est respectée (test == true) alors c’est retourTrue qui sera retourné, si la conditionA est fausse alors c’est retourFalse qui sera retourné ! On pourrait très bien aussi écrire la même chose à l’aide d’un IF/ELSE plus classique :

if(conditionA)
{
    return retourTrue;
}
else
{
    return retourFalse;
}

L’intérêt de l’opérateur ternaire est que l’on va pouvoir tout écrire sur la même ligne, et donc insérer des tests directement à des endroits où l’on n’aurait pas pu avec le classique IF/ELSE. La limite de la ternaire se situe dans le fait qu’elle doit nécessairement retourner une valeur, là ou un block IF/ELSE classique pourrait exécuter tout un bout de code ! Notez qu’il est tout à fait possible d’imbriquer plusieurs ternaires les unes dans les autres (TernaireCeption) afin d’obtenir un bout de code à la maintenabilité plus que douteuse !

Comme un exemple est toujours plus parlant :

int[] _productTypeID = GetProductTypeChecked();
 
var _products = from _product in db.PRODUCTs
                where (_productTypeID.Count() > 0 ? _productTypeID.Contains(_product.TypeID) : true)
                select _product;

Voilà pour ce petit bout de code, imaginons que l’on souhaite retourner tous les produits d’une base tout en ayant la possibilité de filtrer par le type de produit. Si des Types de produit ont été “checkés” alors la clause where contiendra le filtre sur le Type, sinon la clause Where sera tout simplement “where true” et donc sera sans effet.

Et bien ici on réduit quand même grandement le nombre de lignes à produire en insérant le test directement dans la requête LinQ. Voilà ce que l’on aurait eu à coder avec un test normal :

int[] _productTypeID = GetProductTypeChecked();
 
                    if (_productTypeID.Count() > 0)
                    {
                        var _products = from _product in db.PRODUCTs
                                        where _productTypeID.Contains(_product.TypeID)
                                        select _product;
                    }
                    else
                    {
                        var _products = from _product in db.PRODUCTs
                                        select _product;
                    }

C’est pas très violent ici car le code est très basique, mais dans certain cas, c’est tout de même vraiment pratique alors pensez à les utiliser ! A noter que cet opérateur existe aussi en PHP et en Java !!

MasterDetail

Tutoriel Silverlight ,part 3 : Le Binding

32

Nous voici donc dans la 3ème partie de cette liste de tutoriels sur Silverlight et je vais essayer de vous parler du Binding de données.

Alors qu’est ce que c’est que le Binding de données oO ???

Le Binding est une méthode qui va nous permettre d’associer les données (C#), à des composants graphiques (interface) dans le Xaml, afin de les afficher. Par exemple pour faire simple, si je li la propriété Nom, d’un objet personne, à une TextBox et bien la valeur de la TextBox prendra la valeur de la propriété Nom. Dans cette exemple la propriété Nom serait donc la source et la propriété Text de la TextBox serait donc la cible.

Nous allons donc créer un nouveau projet comme la dernière fois, appelons le Binding (original).Le but de ce projet sera des plus simple puisqu’il s’agira de construire une simple application Master/Detail en utilisant le DataBinding. Nous aurons donc une ComboBox contenant une liste de personnes et un petit formulaire permettant d’afficher les détail de la personne sélectionnée.

MasterDetail Tutoriel Silverlight ,part 3 : Le Binding (Lire la suite…)

Attendre

Tutoriel Silverlight ,part 2 : Hello World

4

bb899456.polaroid%20coach%20silverlight%28fr fr,MSDN.10%29 Tutoriel Silverlight ,part 2 : Hello World

Bon comme promis nous voilà lancé dans la série de petits tutoriels sur Silverlight et on va commencer très doucement en créant notre 1er projet qui sera en fait un truc très bateau qui nous permettra de mieux comprendre le “comentkeçamarche” un site fait en Silverlight. Sachez que aux travers de toutes les parties que nous verrons nous utiliserons du C# avec Silverlight 4.0, autrement dit, le dernier du nom parce que tant qu’a faire autant utiliser ce qui se fait de mieux. (Lire la suite…)

Historique_Flex_Silverlight

Tutoriel Silverlight ,part 1 : Présentation

5

microsoft silverlight2 269x300 Tutoriel Silverlight ,part 1 : Présentation

Voilà, à plusieurs reprises j’ai eu envie de faire un petit post sur des news concernant Silverlight. Cependant, cela n’a jamais été fait. Je me disais que c’était surement dû à la trop grande spécificité de l’application. Mais Silverlight étant une technologie que j’affectionne tout particulièrement, et étant Microsoft Partner au boulot (je sens déjà les tux me jeter des cailloux), j’ai souvent l’occasion de l’utiliser pour mes projets perso/pro.

J’ai donc eu envie de vous faire partager mon attrait pour cette technologie aux travers de petits tutoriels qui j’espère vous donnerons envie, vous aussi, de vous mettre à développer en Silverlight. Si ça intéresse des gens, j’essaierais donc de faire un petit post chaque semaine sur un aspect différent de Silverlight à chaque fois. Le tout, dans le but “d’essayer” (je ne suis pas un PGM non plus) de vous inculquer les bases.

Donc aujourd’hui, je vais juste essayer de vous présenter la techno, son historique et tout, afin j’espère de vous mettre un peu l’eau à la bouche =)

(Lire la suite…)

Windows

Serveur IIS express

0

IIS est le serveur de chez Microsoft qui permet d’héberger sur vos serveurs toutes applications utilisant le framework DotNet. Le problème c’est qu’il est impossible de débuguer une application installée sur un serveur de production de type IIS. Hors, vous devez être nombreux à avoir déjà vécu le fait que, même si en environnement de test tout va pour le mieux, il arrive toujours des soucis au moment où l’on bascule sur un environnement de production icon sad Serveur IIS express .

Cassini, le “petit” serveur web intégré à Visual studio est en somme très pratique puisqu’il est capable d’héberger très facilement nos applications en développement. Aucune configuration/installation préalable n’est nécessaire pour son utilisation.

Le problème de Cassini est justement qu’il est un peu trop ‘lite’, et que certaines options de configuration font défauts, ce qui oblige bien souvent à passer l’application dans un environnement de production afin d’effectuer certains tests (réécriture d’url, paramètres de sécurité…).

Et bien Microsoft va bientôt sortir une petite application nommer IIS express, qui permettra de débuger ses applications dans Visual Studio (à la manière de Cassini) tout en proposant une large palette de service disponible uniquement sur un serveur IIS.

A noter que IIS express est prévu uniquement pour fonctionner sous VS 2010 (express ou pas), mais qu’il sera possible de l’intégrer à VS 2008 pour permettre une utilisation en ligne de commande.

Je vous en reparle très bientôt dés que j’aurais eu l’occasion de “tester la bête” !!

Source

Windows

Créer ses propres snippet sur Visual studio,

3

Comme je viens de formater ma bécane au boulot il a fallu que je refasse certains trucs dont celui de recréer mes snippets perso sur mon Visual Studio.

Pour ceux qui ne savent pas, les snippets ce sont des petits fichiers écrit en xml qui permettent de générer du code rapidement sous Visual Studio. Il existe bien sur des snippets “de base” qui sont disponible dés l’installation de Visual Studio.

Pour donner un exemple concret, pour générer un constructeur de base dans une classe on peut bien sur se farcir le code à la main, ou bien utiliser un snippets de base, pour cela on tape “ctor” puis deux fois tabulation et VS nous génére tous seul le code suivant :

public MaClasse(){

}


Bon comme ça, ça parait pas bien violent mais ça permet de vraiment gagner en productivité !! Un autre exemple, vous taper “prop” puis deux tabulations et hop :

public int MyProperty { get; set; }


Celle-ci aussi est très pratique mais le problème c’est que les assesseurs sont vide et que mettre toutes les propriétés en public bha c’est quand même pas terrible…

Et c’est là que c’est intéressant, on peut aussi créer ses propres snippets. Par exemple quelque chose qui serait bien serait de pouvoir générer directement une variable private, et une public contenant les getter et setter de notre private. Un truc qui serait pas mal ressemblerait un peu à ça par exemple :

private int _myProperty;
public int myProperty
{
get
{
return this._myProperty;
}
set
{
this._myProperty = value;
}
}

Donc pour cela on va donc créer notre propre fichier snippet. On ouvre un éditeur de texte (style notepad++) et voila a quoi doit ressembler notre truc :



<?xml version=”1.0″ encoding=”utf-8″ ?>
<CodeSnippets xmlns=”http://schemas.microsoft.com/
VisualStudio/2005/CodeSnippet”>
<CodeSnippet Format=”1.0.0″>
<Header>
<Title>NotreSnippet</Title>
<Shortcut>maprop</Shortcut>
<Description>Code snippet generer une propriete privee et ses assesseurs</Description>
<Author>MoZo</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>Property type</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>name</ID>
<ToolTip>Property Name</ToolTip>
<Default>myProperty</Default>
</Literal>
</Declarations>
<Code Language=”csharp”>
<![CDATA[
private $type$ _$name$;
public $type$ $name$
{
get
{
return this._$name$;
}
set
{
this._$name$ = value;
}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>



Je vais essayer d’expliquer maintenant chaque partie :



<Header>
<Title>NotreSnippet</Title>      –>On donne un titre a notre snippet
<Shortcut>maprop</Shortcut>      –>Le shortcut c’est ce que va devoir taper avant les deux tabulation (comme “ctor” ou “prop”)
<Description>Code snippet generer une propriete privee et ses assesseurs</Description>     –> une petite description qui sera visible pour la complétion de code
<Author>MoZo</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>  –> ça on laisse comme ça icon smile Créer ses propres snippet sur Visual studio,
</SnippetTypes>
</Header>



Ensuite c’est très simple, dans la partie Declarations on va déclarer (oO) nos variables, les choses qui vont se répeter dans notre codes



<Declarations>
<Literal>
<ID>type</ID> –> on donne un ID
<ToolTip>Property type</ToolTip> –> Le toolTip pour la completion
<Default>int</Default> –>Une valeur par default
</Literal>
<Literal>
<ID>name</ID>
<ToolTip>Property Name</ToolTip>
<Default>myProperty</Default>
</Literal>
</Declarations>



Et enfin une fois nos variables définies il faut donner la structure du code à générer, pour cela il suffit d’appeler nos variable où on veux les mettre en les entourant de $. Comme ça il nous suffira d’écrire une seule fois le type et une seul fois le nom de notre propriété icon smile Créer ses propres snippet sur Visual studio,



<![CDATA[
private $type$ _$name$;   --> Mes variables private sont précédées d'un "_" (c'est juste une convention de ma part)
public $type$ $name$ --> la variable public
{
get
{
return this._$name$;   ----> et les assesseurs
}
set
{
this._$name$ = value;
}
}
$end$]]>



Une fois votre fichier tapé il ne vous reste plus qu’a enregistrer ce fichier avec l’extension .snippet (MonFichier.snippet). Puis dans votre VStudio, faites ctrl + K, puis ctrl + B, cela va vous ouvrir le gestionnaire de snippet. Faites importer puis séléctionnez votre fichier puis validez. Et voila il ne vous reste plus qu’a tester.
Dans VS taper la valeur du shortcut (ici “maprop”) puis faites 2 tabulations et cela devrai vous générer le code suivant :



private int _myProperty;

public int myProperty
{
get
{
return this._myProperty;
}
set
{
this._myProperty = value;
}
}




Voila c’est tout !! Et on peux en faire pour tous ce qui pourrait nécessiter une factorisation de son code, sa permet vraiment de gagner du temps. Sinon pour les plus feignant sachez que l’on peux trouver pleins de snippets très utile et déjà créer sur le net !!

Haut de page