Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

2 février 2014 7 02 /02 /février /2014 01:27

I - Nouveautés  de C# 3.0

 

Les nouveautés permettent notamment d’écrire moins de code (celui-ci étant généré par le compilateur).

Reflector ou ILSpy sont tout indiqués pour observer le code IL généré.

 

1-Les accesseurs simplifiés :

Avant nous aurions écrit :

        private string _contactName ;

 

        public string ContactName

        {

            get { return _contactName; }

            set { _contactName = value; }

       

        }

 

Avec cette nouveauté nous pouvons réduire à :

public string ContactName { get; set; }

 

Exemple complet

public class Contact

    {

        public string ContactName { get; set; }

 

        public Contact(string contactName)

        {

            this.ContactName = contactName;

        }

    }

Création d’un contact

 Contact contact = new Contact("Bellin");

 

Vous pouvez utiliser Reflector ou ILSpy pour regarder le code IL généré (Un membre est ajouté)

2-Les méthodes partielles.

Déclarées sans portée, partial  et void(ne peuvent rien retourner)

La classe contenant une méthode partielle doit également être déclarée comme partial

Exemple :

    public partial class Contact

    {

        public string ContactName { get; set; }

 

        partial void SetName(string contactName);

    }

    public partial class Contact

    {

        partial void SetName(string contactName)

        {

            ContactName = contactName;

        }

    }

 

 

3-Les initialiseurs d’objets et de collections

Permettent de donner une valeur aux propriétés dès l’initialisation sans passer par le constructeur

Initialiseur d’objet

Contact contact = new Contact() {ContactName ="Marie",ContactFirstName="Bellin" };

 

Initialiseur de collection

List<Contact> contacts = new List<Contact>(){

                new Contact(){ ContactName ="Marie",ContactFirstName="Bellin" },

                new Contact(){ ContactName ="Paul",ContactFirstName="Dupond" }

            };

 

La classe Contact utilisée

public class Contact

{

        public string ContactName { get; set; }

        public string ContactFirstName { get; set; }

}

 

On pourrait pu également faire appel à un constructeur si la classe en avait un de cette manière

List<Contact> contacts = new List<Contact>(){

                new Contact("Marie","Bellin"),

                new Contact("Paul","Dupond")

            };

 

… voir faire des mélanges (ne pas oublier de déclarer un constructeur vide)

List<Contact> contacts = new List<Contact>(){

                new Contact("Marie","Bellin"),

                new Contact(){ ContactName ="Paul",ContactFirstName="Dupond" }

            };

 

4- L’inférence de type

 

On déclare une variable avec le mot var, celle-ci doit être initialisée en même temps pour que le compilateur puisse déterminer son type.

Exemple

var message = "Bonjour à tous !"; // le type de la variable sera System.String ;

5- Les types anonymes (AnonymousType)

Les types anonymes dérivent de System.Object .Ils servent à créer un type pour stocker une liste d’informations .Cette notion est importante à comprendre, on récupère une liste d’informations, il faut travailler avec ces informations en sachant qu’un type a été créé  et ne pas vouloir faire une conversion.

var client = new {ClientName="Bellin",Email="bellinmarie@live.com"};

// un type anonyme est généré à la compilation, on a accès aux informations de la même manière qu’à une classe « classique »

MessageBox.Show(client.Email);

 

On peut faire une requête Linq et créer un type contenant les informations

Exemple : on crée un nouveau type et on récupère la liste en résultat (que l’on affiche dans une listBox)

  var clients = from c in contacts

                         where c.ContactFirstName.StartsWith("B")

                         select new{ClientName = c.ContactName,ClentFirstName= c.ContactFirstName} ;

 

            //

            foreach (var client in clients)

            {

                listBox1.Items.Add(client.ClentFirstName + " " + client.ClientName);

            }

 

6-Les méthodes d’extension

Permettent d’étendre des méthodes (ajouter des signatures de méthode) à du code dont on n’a pas la source .Cela peut servir à étendre des méthodes du Framework.NET par exemple.

Une méthode d’extension doit être :

Contenu dans une classe Static

cette méthode est Static et contient donc en premier paramètre l’objet sur laquelle elle s’applique

Un exemple très simple .J’étends la méthode Substring de la classe String pour qu’elle retourne mon nom de client.

 

  public static class ExtensionMethodsDemo

    {

        public static string Substring(this string s)

        {

            return s.Substring(6,6);

        }

    }

 

string client = "Marie Bellin";

string firstName = client.Substring();

 

L’important ici est de voir que la méthode a bien été ajoutée

  cs1

7-Les expressions lambda

Une expression lambda est une fonction ne possédant pas de nom, exécutant un traitement et retournant une valeur.

 

Elle se présente en 3 parties

- liste de paramètres

- opérateur =>

- expression

  Les expressions lambda sont utiles pour des calculs et sur des énumérables .  

 

Exemple :

Expression Lambda  

List<Contact> selectedContacts = contacts.Where(c => c.ContactFirstName.StartsWith("B")).ToList();

 

A savoir que l’on peut très bien utiliser LINQ, les expressions lambdas et les méthodes anonymes pour obtenir le même résultat  .Il est même possible de les « mixer »  

Exemple :

LINQ

List<Contact> selectedContacts = (from contact in contacts where contact.ContactFirstName.StartsWith("B") select contact).ToList();

 Méthode anonyme    

List<Contact> selectedContacts = contacts.Where<Contact>(delegate(Contact contact) { return contact.ContactFirstName.StartsWith("B"); }).ToList();

 

Partager cet article

Repost 0
Published by Romagny13 - dans C
commenter cet article

commentaires