aiguisez votre c#

20
AIGUISEZ VOTRE C#

Upload: vincent-hubert

Post on 24-May-2015

866 views

Category:

Technology


4 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Aiguisez votre c#

AIGUISEZ VOTRE C#

Page 2: 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

[email protected]

Page 3: Aiguisez votre c#

QUELQUES NOTIONS DE BASE

Fruit

Pomme

Cortland GrannySmith Golden

Page 4: Aiguisez votre c#

CONTRAVARIANCE ET COVARIANCE

• 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.

Page 5: Aiguisez votre c#

UN EXEMPLE CONCRET

Page 6: Aiguisez votre c#

ATTENTION, MÉTHODES EN SURCHARGE

Pomme maPomme = new Cortland();

maPomme.ConfigurePelure(5);

Question Quiz:

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

Page 7: Aiguisez votre c#

ATTENTION, 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 ?

Page 8: Aiguisez votre c#

ATTENTION, MÉTHODES EN SURCHARGE

• Les différentes surcharges d’une même méthode doivent impérativement avoir la même sémantique.

Page 9: Aiguisez votre c#

ATTENTION, MÉTHODES EN SURCHARGE

Class PanierDePomme{…

// Ajoute une pomme au panierpublic Ajouter(Pomme maPomme){…}

// Ajoute des vitamines à chaque pomme

public Ajouter(Vitamine maVit) {…}

}

MA

L

Page 10: Aiguisez votre c#

ATTENTION, 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)

Page 11: Aiguisez votre c#

VOUS POUVEZ DISPOSER

• À quoi sert le patron de conception « dispose » en .Net?

• Sous quelle condition devez-vous presque assurément rendre votre classe « IDisposable »

Page 12: Aiguisez votre c#

VOUS 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; } }

Page 13: Aiguisez votre c#

VOUS POUVEZ DISPOSER

using (var DbConn = new DBConnection() ){

// Élidé}

• Le mot clé « using » permet de simplifier l’application du patron et de garantir l’exécution du dispose.

Page 14: Aiguisez votre c#

FINALEMENT… FINALLY

try{ ... }finally{ ... }

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

Page 15: Aiguisez votre c#

GETHASHCODE

• 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.

Page 16: Aiguisez votre c#

UN CHIP AVEC ÇA?

Machine 1 Machine 2

Page 17: Aiguisez votre c#

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!

Page 18: Aiguisez votre c#

NEW KID ON THE BLOCK

• Quelle est la seule bonne raison d’utiliser le mot-clé « new » sur une définition de méthode?

Page 19: Aiguisez votre c#

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.

Page 20: Aiguisez votre c#

MERCI

Bonne Programmation

[email protected]