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:28

I - Nouveautés  de C# 2.0

 

1-Les méthodes anonymes

On passe par l’intermédiaire d’un délégué pour appeler une méthode .Cette méthode peut être : une « vraie méthode », une expression lambda, une méthode anonyme .

Avec un délégué nommé :

- un delegate

- une méthode respectant les paramètres et le type de retour du delegate

- une instance pointant sur la méthode

- déclenchement

 

        delegate bool Authentify(string clientName);

 

        private void btnValidate_Click(object sender, EventArgs e)

        {   

            Authentify authentify = CompareName;

 

            bool result = authentify(txtName.Text);

        }

 

        public bool CompareName(string clientName)

        {

            return clientName == "Bellin";

        }

 

Avec une méthode anonyme

       delegate bool Authentify(string clientName);

 

        private void btnValidate_Click(object sender, EventArgs e)

        {   

            // 2 méthode anonyme

            Authentify authentify = delegate(string clientName) { return clientName == "Bellin"; };

           

            bool result = authentify(txtName.Text);

        }

Avec expression lambda

//

        delegate bool Authentify(string clientName);

 

        private void btnValidate_Click(object sender, EventArgs e)

        {   

            // 3 expression lambda

            Authentify authentify = new Authentify(clientName =>

            {

                { return clientName == "Bellin"; }

 

            });

 

            bool result = authentify(txtName.Text);

        }

 

2-Les generics

Les generics permettent la réutilisation du code en ne spécifiant pas un type précis .

Exemple : une classe généric et une méthode généric

public class Client

    {

        public string Name { get; set; }

        public string Email { get; set; }     

    }

    public class GenericCollectionDemo<T> : List<T>

    {

        public void Add<T>(T obj)

        {

            if (obj.GetType().Name=="Client")

              this.Add(obj);

        }

        public T GetObj(int index)

        {

            return this[index];

        }

    }

 

Utilisation

GenericCollectionDemo<Client> collectionDemo = new GenericCollectionDemo<Client>();

collectionDemo.Add(new Client() { Name = "Bellin Marie", Email = "bellinmarie@live.com" });

Autre exemple

List<int> numbers = new List<int>() { 1, 3, 5 };

 

default

Renvoie null pour un type référence, 0 pour un type valeur tel que int, false pour un bool,…

return default(T);

 

Restrictions

Permet de restreindre l’accès

where T : struct

T doit être un type valeur

where T : class

T doit être un type référence

where T : new()

T doit avoir un constructeur par défaut (sans paramètres)

where T : INomInterface

T doit implémenter l’interface

where T : NomClasse

T doit dériver de la classe

where T1 : T2

T1 doit dériver de T2

 

Exemple

public class DemoGeneric<T>

    {

        public T DemoDefault<T>() where T : struct

        {

            return default(T);

        }

    }

 

DemoGeneric<bool> boolean = new DemoGeneric<bool>();

bool result = boolean.DemoDefault<bool>();

 

3-Les itérateurs

       public interface IEnumerable

        {

            IEnumerator GetEnumerator();

        }

 

        public interface IEnumerator

        {

            bool MoveNext();

            object Current { get; }

            void Reset();

        }

 

        public interface IEnumerable<T> : IEnumerable

        {

            IEnumerator<T> GetEnumerator();

        }

 

        public interface IEnumerator<T> : IEnumerator, IDisposable

        {

            T Current { get; }

        }

 

Exemple

List<int> numbers = new List<int>() { 1, 3, 5, 8 };

 

            IEnumerator enumerator = numbers.GetEnumerator();

 

            while (enumerator.MoveNext())

            {

                object current = enumerator.Current;

            }

 

Yield return

Foreach se fait sur un enumerable . Yield return renvoit un résultat.Une sorte de ping pong a donc lieu entre la boucle foreach et la méthode appelée

public class ContactCollection : List<Contact>

    {

        public IEnumerable GetContacts()

        {

            for (int i = 0; i < this.Count; i++)

                yield return this[i];

        }

    }

 

ContactCollection contacts = new ContactCollection(){

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

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

            };

 

           

            foreach (Contact contact in contacts.GetContacts())

            {      

                listBox1.Items.Add(contact.ContactFirstName);

            }

 

4-Les classes partielles

Cela permet d’écrire une classe sur plusieurs fichiers.

Exemple Form1.Designer .cs

partial class Form1

{

   /// <summary>

        /// Variable nécessaire au concepteur.

        /// </summary>

        private System.ComponentModel.IContainer components = null;

 

/// …

}

 

Et Form1.cs contenant le code behind

public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

}

 

3-Les types nullables

Très utile par exemple pour les données récupérées de base de données qui peuvent être null

System.Nullable<int> i = null;

// ou abrégé

int? i = null;

 

 

if (i.HasValue)

  // si i n'est pas null ...

 

i.GetValueOrDefault(); // renvoit la valeur ou bien 0

 

i = null; // on peut affecter la valeur null

 

4-L'opérateur ::

L'opérateur :: permet d'appeler l'espace de nom global pour éviter les conflits avec des variables locales qui auraient le même nom

Exemple

::Console.WriteLine("Hello World");

 

Partager cet article

Repost 0
Published by Romagny13 - dans C
commenter cet article

commentaires