AIGUISEZ VOTRE C#
PRÉSENTATION     •   Vincent Hubert     •   Consultant indépendant     •   Hubiq (www.hubiq.net)     •   Travaille proche ...
Q UELQUES   NOTIONS DE BASE                         Fruit                         Pomme        Cortland      GrannySmith  ...
C ONTRAVARIANCE   ET   C OVARIANCE   • COVARIANCE      – SUBSTITUER UN TYPE PLUS        DÉRIVÉ QUE CELUI QUI EST        AT...
UN EXEMPLE CONCRET
A TTENTION , MÉTHODES EN SURCHARGE        Question Quiz:        Quelle est la signature originale de la        méthode app...
A TTENTION ,   MÉTHODES EN SURCHARGE    •   Pomme.ConfigurePelure(int param)    •   Pomme.ConfigurePelure(int param, objec...
A TTENTION ,   MÉTHODES EN SURCHARGE    • Les différentes      surcharges d’une même      méthode doivent      impérativem...
A TTENTION , MÉTHODES EN SURCHARGE       Class PanierDePomme       {       …              // Ajoute une pomme au panier   ...
A TTENTION ,   MÉTHODES EN SURCHARGE    • Les différentes surcharges      d’une même méthode doivent      impérativement a...
V OUS   POUVEZ DISPOSER    • À quoi sert le patron de      conception « dispose » en      .Net?    • Sous quelle condition...
V OUS POUVEZ DISPOSER      public void Dispose()         {             Dispose(true);             // Use SupressFinalize i...
V OUS POUVEZ DISPOSER       • Le mot clé « using » permet         de simplifier l’application         du patron et de gara...
F INALEMENT … F INALLY       Probablement le mot clé le plus sous-utilisé       C’est la construction utilisée par le fram...
G ETHASHCODE   • La méthode GetHashCode     doit être redéfinie si la     méthode equals est     redéfinie.   • Deux GetHa...
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       im...
N EW   KID ON THE BLOCK       • Quelle est la seule bonne         raison d’utiliser le mot-         clé « new » sur une   ...
UNSAFE PEUT-ÊTRE, MAIS VITE, VITE, VITE     • Les pointeurs existent en       C#.     • Un bloc unsafe permet d’y       dé...
MERCIBonne Programmation Vincent@hubiq.net
Prochain SlideShare
Chargement dans…5
×

Aiguisez votre c#

1 189 vues

Publié le

Présention sur certains aspects du C# fait à la communaté .Net de Montréal le 23 janvier 2012

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 189
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
31
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Aiguisez votre c#

  1. 1. AIGUISEZ VOTRE C#
  2. 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. 3. Q UELQUES NOTIONS DE BASE Fruit Pomme Cortland GrannySmith Golden
  4. 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.
  5. 5. UN EXEMPLE CONCRET
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 16. UN CHIP AVEC ÇA? Machine 1 Machine 2
  17. 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. 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. 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.
  20. 20. MERCIBonne Programmation Vincent@hubiq.net

×