Calendrier

Décembre 2009
L M M J V S D
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
<< < > >>

Présentation

Recherche

W3C

  • Flux RSS des articles

C# 3.0

Par Romagny13
Ecrire un commentaire - Voir les commentaires - Recommander
Méthodes d’extension
 
Les méthodes d’extension sont extrêmement utilisées par C# 3.0 (Linq notamment , par exemple toutes les méthodes de System.Linq.enumerable)
La class contenant une  méthode d’extension doit :
-          Etre static
 
La méthode d’extension doit :
-          Etre static
-          Comporter un paramètre avec  this (ce paramètre ne sera pas visible ni « accessible ») c’est lui qui va définir le type qui va être étendu (soit une classe du framework(ex : classe string) , soit une de ses propres classes (ex : classe Contact)
Les méthodes ne seront visibles que le code compilé une première fois
 
Exemple j’étends la classe string avec une petite méthode personnelle
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ExtensionMethodsTest
{
    public static class ExtensionMethods
    {
 
        public static string MySubstring(this string s, int nStart, int nEnd)
        {
            string sResult = string.Empty;
            if (nEnd <= nStart || nStart > s.Length || nEnd > s.Length)
            { }
            else
            {
                int nLength = nEnd - nStart;
                sResult = s.Substring(nStart, nLength);
            }
 
            return sResult;
        }
    }
}
 
Utilisation
           string s = "bonjour à tous";
           MessageBox.Show( s.MySubstring(10, 14));
 
Par Romagny13
Ecrire un commentaire - Voir les 1 commentaires - Recommander
[ C# 3.0 et Linq ] – quelques unes des nouveautés
1 - Initialisateurs d’objets
 
// Initialisateur d'objet
Contact oContact = new Contact { ContactName = "Romagny", ContactFirstName = "Jérôme" };
 
           
List<Contact> oContactList = new List<Contact> {
             new Contact { ContactName = "Romagny", ContactFirstName = "Jérôme" },
             new Contact { ContactName = "Bellin", ContactFirstName = "Marie" },
             new Contact { ContactName = "While", ContactFirstName = "Dany" },
                                         };
           
Sachant que cela marche pour n’importe quelle classe
2 - Expressions Lambda
Contact oSelectedContact = oContactList.First((Contact c) => c.ContactName.StartsWith("B"));
 
3 – Points particuliers
            // point particulier
            // il faut créer un objet à chaque fois
            // ainsi si je réutilise l'object Contact
            // 1 seul contact sera ajouté en base de données
            Contact oContact = new Contact();
 
            oContact.ContactFirstName = "Dany";
            oContact.ContactName = "While";
 
            oContacts.Add(oContact);
 
            oContact.ContactFirstName = "Lord Bret";
            oContact.ContactName = "Sainclair";
 
            oContacts.Add(oContact);
 
            oContactDataContext.SubmitChanges();
 
            // Par contre en créant 2 objets
            // la mise à jour ajoutera bien des lignes à la table contact
            Contact oContact = new Contact();
            Contact oContact2 = new Contact();
 
            oContact.ContactFirstName = "Dany";
            oContact.ContactName = "While";
 
            oContacts.Add(oContact);
            oContactDataContext.Contacts.Add(oContact);
 
            oContact2.ContactFirstName = "Lord Bret";
            oContact2.ContactName = "Sainclair";
 
            oContacts.Add(oContact2);
 
            oContactDataContext.SubmitChanges();
 
// une autre écriture tirant partie de C# 3.0
oContacts.Add(new Contact { ContactName = "Romagny", ContactFirstName = "Jérôme" });
oContacts.Add(new Contact { ContactName = "Bellin", ContactFirstName = "Marie" });
 
oContactDataContext.SubmitChanges();
 
4 - ET et OU dans une requête Linq
            // OU
            // Supprimera 3 contacts
            var Query =
              from oContact in oContacts
              where oContact.ContactID == 13 || oContact.ContactID == 14 || oContact.ContactID == 17
               select oContact;
 
            // ET
            // Query est une collection de collection
            // tous les contacts respectant la condition seront supprimés
            var Query =
                from oContact in oContacts
                where oContact.ContactFirstName == "Lord Bret" && oContact.ContactName == "Sainclair"
                select oContact;
 
            oContacts.RemoveAll(Query.ToList<Contact>());
            oContactDataContext.SubmitChanges();
 
5 - On peut également avoir accès aux variables et objets externes à l’intérieur d’une requête Linq
var Query =
        (from oContact in oContacts
         where oContact.ContactID == Convert.ToInt32(dataGridView1.CurrentRow.Cells["ContactID"].Value)
         select oContact).First();
 
6 – Les properties
Bon pour être honnête je trouve cela un peu  «  gadget » , mais comme Microsoft désire tout « factoriser » ,c'est-à-dire réduire au maximum le code en omettant tout ce qui est « su » ou peut être deviné à la compilation …
   Contact oContact = new Contact();
            oContact.ContactName = "Romagny";
 
            MessageBox.Show(oContact.ContactName);
           
 
Et dans la classe Contact
private string _ContactName;
 
        public string ContactName
        {
            get;
            set;
        }
 
Surtout que comme on peut le voir avec reflector ce n'est qu'une facilité pour la saisie car le code lui est bien généré
même si les variables ont des noms bizarres (avec <> pour eviter que celles ci puissent être confondues ou être en conflit avec une variable que le developpeur aurait créée)
 et oui il n'y a rien de magique !!
 
contact.JPG
Par Romagny13
Ecrire un commentaire - Voir les commentaires - Recommander

Un webcast C# 3.0

Encore un petit webcast sur C# 3.0 à suivre :p

certes un peu ancien mais bon il y a toujours des petits détails à apprendre

http://www.microsoft.com/france/events/event.aspx?EventID=1032300126

 

Par Romagny13
Ecrire un commentaire - Voir les 1 commentaires - Recommander

C# 3.0 et Linq

 

Deux articles de Thomas Lebrun sur C# 3.0 et Linq (excellents tant au niveau de la clarté des explications que de l'approche)

[C#] Rappel: Les nouveautés de C# 3

http://blogs.codes-sources.com/tom/archive/2007/04/12/c-rappel-les-nouveaut-s-de-c-3.aspx

C# 3 et LINQ

http://morpheus.developpez.com/linq/

 

et pendant que j'y suis >

Focus sur l'ObjectDataProvider de WPF

http://morpheus.developpez.com/wpf/objectdataprovider/

Par Romagny13
- Voir les commentaires - Recommander
Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus