SlideShare una empresa de Scribd logo
1 de 20
AIGUISEZ VOTRE C#
PRÉSENTATION

     •   Vincent Hubert
     •   Consultant indépendant
     •   Hubiq (www.hubiq.net)
     •   Travaille proche du
         métal
         – C++, .Net
         – Appareils médicaux,
           TPV, Borne interactive,
           vision artificielle,
           simulateurs ATC
     • Vincent@hubiq.net
Q UELQUES   NOTIONS DE BASE




                         Fruit




                         Pomme




        Cortland      GrannySmith   Golden
C ONTRAVARIANCE   ET   C OVARIANCE

   • COVARIANCE
      – SUBSTITUER UN TYPE PLUS
        DÉRIVÉ QUE CELUI QUI EST
        ATTENDU
        • Par exemple, le paramètre d’une
          méthode.
   • CONTRAVARIANCE
      – SUBSTITUER UN TYPE DE BASE À
        CELUI QUI EST ATTENDU
        • Par exemple, une valeur de
          retour.
UN EXEMPLE CONCRET
A TTENTION , MÉTHODES EN SURCHARGE


        Question Quiz:

        Quelle est la signature originale de la
        méthode appelée ci-bas?



       Pomme maPomme = new Cortland();

       maPomme.ConfigurePelure(5);
A TTENTION ,   MÉTHODES EN SURCHARGE


    •   Pomme.ConfigurePelure(int param)
    •   Pomme.ConfigurePelure(int param, object
        toto=null)
    •   Pomme.ConfigurePelure(double param)
    •   Pomme.ConfigurePelure<T>(T param)
    •   Pomme.ConfigurePelure<T>(T param, object
        toto=null)
    •   MyExt.ConfigurePelure( this Pomme me, int
        param)
    •   Myext.ConfigurePelure(this Pomme me, int
        param, object toto=null)
    •   Myext.ConfigurePelure(this Pomme me, double
        param, object toto=null)

        – Et peut-être la même chose avec la classe de base
          « Fruit »?
        – Les dynamics? Param ?
A TTENTION ,   MÉTHODES EN SURCHARGE




    • Les différentes
      surcharges d’une même
      méthode doivent
      impérativement avoir la
      même sémantique.
A TTENTION , MÉTHODES EN SURCHARGE



       Class PanierDePomme
       {
       …
              // Ajoute une pomme au panier
              public Ajouter(Pomme maPomme){…}

              // Ajoute des vitamines à chaque pomme
              public Ajouter(Vitamine maVit) {…}

       }
A TTENTION ,   MÉTHODES EN SURCHARGE


    • Les différentes surcharges
      d’une même méthode doivent
      impérativement avoir la
      même sémantique.
    • Attention, chaque surcharge
      additionnelle peut
      augmenter la complexité sur
      une base quasi-
      exponentielle. (Exemple:
      MessageBox)
V OUS   POUVEZ DISPOSER


    • À quoi sert le patron de
      conception « dispose » en
      .Net?
    • Sous quelle condition
      devez-vous presque
      assurément rendre votre
      classe « IDisposable »
V OUS POUVEZ DISPOSER


      public void Dispose()
         {
             Dispose(true);
             // Use SupressFinalize in case a subclass
             // of this type implements a finalizer.
             GC.SuppressFinalize(this);
         }

        protected virtual void Dispose(bool disposing)
        {
            // If you need thread safety, use a lock.
            if (!_disposed) {
                if (disposing) {
                    if (_resource != null)
                        _resource.Dispose();
                        Console.WriteLine("Object disposed.");
                }

                 // Indicate that the instance has been disposed.
                 _resource = null;
                 _disposed = true;
             }
        }
V OUS POUVEZ DISPOSER


       • Le mot clé « using » permet
         de simplifier l’application
         du patron et de garantir
         l’exécution du dispose.
       using (var DbConn = new DBConnection() )
       {
             // Élidé
       }
F INALEMENT … F INALLY


       Probablement le mot clé le plus sous-utilisé

       C’est la construction utilisée par le framework
       pour les constructions lock() et using()

       Attention aux exceptions dans le bloc finally


       try
       { ... }
       finally
       { ... }
G ETHASHCODE

   • La méthode GetHashCode
     doit être redéfinie si la
     méthode equals est
     redéfinie.
   • Deux GetHashCode doivent
     être égaux si equals
     retourne true.
   • GetHashCode doit
     retourner des valeurs
     bien distribuées.
UN CHIP AVEC ÇA?



   Machine 1       Machine 2
UN CHIP AVEC ÇA?

  • Les « named parameters »
     – Discriminent les paramètres
       de même type à l’appel – peu
       importe l’ordre.
     – Permettent de spécifier un
       paramètre optionnel – peu
       importe l’ordre.
     – Attention: Le nom du
       paramètre est résolu à la
       compilation.
       • Le nom du paramètre fait partie
         du contrat!
N EW   KID ON THE BLOCK


       • Quelle est la seule bonne
         raison d’utiliser le mot-
         clé « new » sur une
         définition de méthode?
UNSAFE PEUT-ÊTRE, MAIS VITE, VITE, VITE

     • Les pointeurs existent en
       C#.
     • Un bloc unsafe permet d’y
       définir des pointeurs.
     • Les références doivent être
       épinglées: fixed().
     • Peuvent être beaucoup plus
       rapide que l’alternative
       managed.
       – Surtout sur des tableaux
         multi–dimensionnels.
MERCI


Bonne Programmation

 Vincent@hubiq.net

Más contenido relacionado

Similar a Aiguisez votre c#

Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalDuchess France
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalagnes_crepet
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
Annotations Java par Olivier Croisier
Annotations Java par Olivier CroisierAnnotations Java par Olivier Croisier
Annotations Java par Olivier CroisierNormandy JUG
 
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGConférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGZenika
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 
Guide javascript
Guide javascriptGuide javascript
Guide javascriptjollivetc
 
Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeEric De Carufel
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
JavaScript pour le développeur Java
JavaScript pour le développeur JavaJavaScript pour le développeur Java
JavaScript pour le développeur Javajollivetc
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPfrwebhelp
 
Terraform - IAC - de quoi s'agit t'il ?.pdf
Terraform - IAC - de quoi s'agit t'il ?.pdfTerraform - IAC - de quoi s'agit t'il ?.pdf
Terraform - IAC - de quoi s'agit t'il ?.pdfDominique Dumont
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
Votre mission ? Découvrir Haskell et le mettre en prod
Votre mission ? Découvrir Haskell et le mettre en prodVotre mission ? Découvrir Haskell et le mettre en prod
Votre mission ? Découvrir Haskell et le mettre en prodCéline Louvet
 
Pourquoi et comment j'ai appris JavaScript
Pourquoi et comment j'ai appris JavaScriptPourquoi et comment j'ai appris JavaScript
Pourquoi et comment j'ai appris JavaScriptjollivetc
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?CGI Québec Formation
 
Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptxHassanAbdel
 

Similar a Aiguisez votre c# (20)

Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
Annotations Java par Olivier Croisier
Annotations Java par Olivier CroisierAnnotations Java par Olivier Croisier
Annotations Java par Olivier Croisier
 
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGConférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 
Guide javascript
Guide javascriptGuide javascript
Guide javascript
 
Top 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton codeTop 5 des meilleures façon d'améliorer ton code
Top 5 des meilleures façon d'améliorer ton code
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
JavaScript pour le développeur Java
JavaScript pour le développeur JavaJavaScript pour le développeur Java
JavaScript pour le développeur Java
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
Terraform - IAC - de quoi s'agit t'il ?.pdf
Terraform - IAC - de quoi s'agit t'il ?.pdfTerraform - IAC - de quoi s'agit t'il ?.pdf
Terraform - IAC - de quoi s'agit t'il ?.pdf
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Votre mission ? Découvrir Haskell et le mettre en prod
Votre mission ? Découvrir Haskell et le mettre en prodVotre mission ? Découvrir Haskell et le mettre en prod
Votre mission ? Découvrir Haskell et le mettre en prod
 
Pourquoi et comment j'ai appris JavaScript
Pourquoi et comment j'ai appris JavaScriptPourquoi et comment j'ai appris JavaScript
Pourquoi et comment j'ai appris JavaScript
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
Langage C#
Langage C#Langage C#
Langage C#
 
Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptx
 

Aiguisez votre c#

  • 2. PRÉSENTATION • Vincent Hubert • Consultant indépendant • Hubiq (www.hubiq.net) • Travaille proche du métal – C++, .Net – Appareils médicaux, TPV, Borne interactive, vision artificielle, simulateurs ATC • Vincent@hubiq.net
  • 3. Q UELQUES NOTIONS DE BASE Fruit Pomme Cortland GrannySmith Golden
  • 4. C ONTRAVARIANCE ET C OVARIANCE • COVARIANCE – SUBSTITUER UN TYPE PLUS DÉRIVÉ QUE CELUI QUI EST ATTENDU • Par exemple, le paramètre d’une méthode. • CONTRAVARIANCE – SUBSTITUER UN TYPE DE BASE À CELUI QUI EST ATTENDU • Par exemple, une valeur de retour.
  • 6. A TTENTION , MÉTHODES EN SURCHARGE Question Quiz: Quelle est la signature originale de la méthode appelée ci-bas? Pomme maPomme = new Cortland(); maPomme.ConfigurePelure(5);
  • 7. A TTENTION , MÉTHODES EN SURCHARGE • Pomme.ConfigurePelure(int param) • Pomme.ConfigurePelure(int param, object toto=null) • Pomme.ConfigurePelure(double param) • Pomme.ConfigurePelure<T>(T param) • Pomme.ConfigurePelure<T>(T param, object toto=null) • MyExt.ConfigurePelure( this Pomme me, int param) • Myext.ConfigurePelure(this Pomme me, int param, object toto=null) • Myext.ConfigurePelure(this Pomme me, double param, object toto=null) – Et peut-être la même chose avec la classe de base « Fruit »? – Les dynamics? Param ?
  • 8. A TTENTION , MÉTHODES EN SURCHARGE • Les différentes surcharges d’une même méthode doivent impérativement avoir la même sémantique.
  • 9. A TTENTION , MÉTHODES EN SURCHARGE Class PanierDePomme { … // Ajoute une pomme au panier public Ajouter(Pomme maPomme){…} // Ajoute des vitamines à chaque pomme public Ajouter(Vitamine maVit) {…} }
  • 10. A TTENTION , MÉTHODES EN SURCHARGE • Les différentes surcharges d’une même méthode doivent impérativement avoir la même sémantique. • Attention, chaque surcharge additionnelle peut augmenter la complexité sur une base quasi- exponentielle. (Exemple: MessageBox)
  • 11. V OUS POUVEZ DISPOSER • À quoi sert le patron de conception « dispose » en .Net? • Sous quelle condition devez-vous presque assurément rendre votre classe « IDisposable »
  • 12. V OUS POUVEZ DISPOSER public void Dispose() { Dispose(true); // Use SupressFinalize in case a subclass // of this type implements a finalizer. GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { // If you need thread safety, use a lock. if (!_disposed) { if (disposing) { if (_resource != null) _resource.Dispose(); Console.WriteLine("Object disposed."); } // Indicate that the instance has been disposed. _resource = null; _disposed = true; } }
  • 13. V OUS POUVEZ DISPOSER • Le mot clé « using » permet de simplifier l’application du patron et de garantir l’exécution du dispose. using (var DbConn = new DBConnection() ) { // Élidé }
  • 14. F INALEMENT … F INALLY Probablement le mot clé le plus sous-utilisé C’est la construction utilisée par le framework pour les constructions lock() et using() Attention aux exceptions dans le bloc finally try { ... } finally { ... }
  • 15. G ETHASHCODE • La méthode GetHashCode doit être redéfinie si la méthode equals est redéfinie. • Deux GetHashCode doivent être égaux si equals retourne true. • GetHashCode doit retourner des valeurs bien distribuées.
  • 16. UN CHIP AVEC ÇA? Machine 1 Machine 2
  • 17. UN CHIP AVEC ÇA? • Les « named parameters » – Discriminent les paramètres de même type à l’appel – peu importe l’ordre. – Permettent de spécifier un paramètre optionnel – peu importe l’ordre. – Attention: Le nom du paramètre est résolu à la compilation. • Le nom du paramètre fait partie du contrat!
  • 18. N EW KID ON THE BLOCK • Quelle est la seule bonne raison d’utiliser le mot- clé « new » sur une définition de méthode?
  • 19. UNSAFE PEUT-ÊTRE, MAIS VITE, VITE, VITE • Les pointeurs existent en C#. • Un bloc unsafe permet d’y définir des pointeurs. • Les références doivent être épinglées: fixed(). • Peuvent être beaucoup plus rapide que l’alternative managed. – Surtout sur des tableaux multi–dimensionnels.