Un courant électrique est un déplacement d'ensemble de porteurs de charge électrique (électrons).
Notion de courant.
Certaines des particules qui constituent la matière sont porteuses d'une charge électrique. Il s'agit des protons fermement enfermés au cœur du noyau des atomes et des électrons qui gravitent autour du noyau.
Dans un conducteur métallique, les électrons sont peu liés aux atomes auxquels ils appartiennent (on dit que ces électrons se trouvent dans la bande de conduction). Ils se déplacent alors facilement dans le matériau métallique. 
Lorsqu'une différence de potentiel est appliquée aux extrémités du conducteur, elle provoque le déplacement de ces électrons, ce que l'on appelle courant électrique.
Vitesse de déplacement.
Chaque électron de conduction se déplace d'un mouvement désordonné à une vitesse élevée, de l'ordre de quelques centaines de km/s. Le courant électrique est le mouvement d'ensemble de tous ces électrons de la borne + du générateur vers sa borne - assurant ainsi le transport de l'électricité. Ce mouvement est lent (quelques cm/s en fonction de l'intensité du courant et de la section du conducteur).
On peut comparer ce déplacement au déplacement de personnes participant à une manifestation. Chaque participant (les électrons) marche à sa propre vitesse, descendant ou remontant la manifestation mais globalement la manifestation (le courant électrique) avance lentement d'un point à un autre.
Lors de la fermeture d'un interrupteur, la propagation de l'influx électrique se fait, quant à elle, à une vitesse voisine de celle de la lumière (ordre de départ de la manifestation).
Quantité d'électricité.
La charge électrique élémentaire est la plus petite charge électrique possible : sa valeur est égale à e=+1,6.10-19 C. Il n'est pas possible de la diviser ou d'en trouver une plus petite.
Les électrons portent une charge élémentaire négative et les protons une charge électrique élémentaire positive.
Le coulomb (C) est l'unité légale de charge électrique (quantité d'électricité).
Sens du courant.
Historiquement, au début de l'étude de la conduction de l'électricité, les scientifiques ont pensé que les particules qui se déplaçaient dans les métaux étaient chargées positivement et ont défini en conséquence un sens conventionnel du courant comme étant le sens de déplacement des charges positives.
Plus tard on a mis en évidence que ce sont très majoritairement les électrons, particules chargées négativement, qui se déplacent dans les métaux et qui permettent la circulation des courants électriques.
Par convention, dans un circuit électrique en boucle simple et en courant continu, le courant électrique sort du générateur par la borne positive (+), traverse le circuit électrique et revient au générateur par sa borne négative (-). C'est ce qu'on appelle le sens conventionnel du courant électrique, il peut être différent du sens réel de déplacement des porteurs de charges.
"Remarque" : À l'intérieur des générateurs électriques où l'on crée le potentiel qui permet aux charges de se mettre en mouvement, les électrons se déplacent de la borne positive vers la borne négative. Ceci est rendu possible grâce à la conversion d'une autre forme d'énergie (ex. : l'énergie électrochimique dans le cas d'une pile).
Isolants / Conducteurs / Semi-conducteurs.
Les matériaux qui possèdent beaucoup de porteurs de charge libres et qui sont donc facilement traversés par un courant électrique sont dits conducteurs, ceux qui n'en possèdent pas ou très peu sont dits isolants ou diélectriques.
L'air sec est un bon isolant, mais au-delà d'un certain seuil, quand le champ électrique est trop grand, les électrons sont arrachés aux atomes, qui deviennent des particules ionisées ou ions, et l'air devient un plasma. Le plasma étant un conducteur parfait, il laisse passer le courant électrique : de l'éclair à l'étincelle.
Les matériaux semi-conducteurs sont à la fois de mauvais isolants et de mauvais conducteurs. Le plus courant est le Silicium. Leur conductivité varie en fonction de nombreux paramètres. Un semi-conducteur intrinsèque est un piètre matériau, inutilisable. On peut rajouter de façon contrôlée des impuretés dans un semi-conducteur, les "dopants". Ils sont intégrés au réseau cristallin semi-conducteur. De type N elles favorisant la présence d'électrons dans la bande de conduction ou de type P favorisent la "présence d'absence d'électrons" dans la bande de valence, les trous.
Les électrons et les trous sont des porteurs libres à l'origine du courant. Grâce aux matériaux semi-conducteurs et impuretés on peut réaliser divers dispositifs :
Bien d'autres dispositifs peuvent être réalisés : photodiodes, panneaux photovoltaïques, diodes Zener, laser, diode électroluminescentes. Grâce à ces matériaux on peut aussi réaliser des capteurs miniaturisés de chaleur, de champ magnétique, d'accélération, de pression... mais ceci est une autre histoire.

Programmation C sharp/Entrées-sorties
Les fonctions d'entrées-sorties utilisent l'espace de nom codice_1.
La classe codice_2.
La classe abstraite codice_2 possède des méthodes permettant à la fois de lire et d'écrire. Cependant, l'écriture ou la lecture peut ne pas être autorisée (fichier en lecture seule, ...).
Propriétés.
La classe codice_2 possède les propriétés suivantes :
Méthodes.
Les méthodes de la classe codice_2 sont les suivantes :
Méthodes asynchrones.
Les méthodes codice_18 et codice_21 utilisant un tableau d'octet existent également en version asynchrone :
Membres statiques.
La classe codice_2 possède également deux membres statiques :
Fonctions asynchrones.
Les fonctions dont le retour peut prendre du temps existent également en version asynchrone. La méthode appelée est alors celle dont le nom commence par codice_51. Elle demande au pool de threads standard d'exécuter l'opération. Une fois l'opération terminée, le delegate passé à la fonction codice_51 doit appeler la fonction codice_53 correspondante pour récupérer le résultat.
Exemple.
Cet exemple utilise la version asynchrone de la méthode codice_18 de la classe codice_2.
class LectureAsync
 private byte[] buffer = new byte[4000];
 public void commencerLecture(Stream s)
 // Commencer la lecture
 IAsyncResult iar = s.BeginRead(buffer, 0, buffer.length, finLecture, s);
 // et retour immédiat
 // La méthode finLecture transmise en 4ème paramètre sera appelée
 // quand la lecture du tableau d'octets sera terminée.
 public void finLecture(IAsyncResult result) //AsyncCallback
 // Stream : le dernier argument transmis à BeginRead
 Stream s=(Stream)result.AsyncState;
 // récupérer le nombre d'octets lus
 int nb_octets = s.EndRead(result);
Flux de fichier.
La classe codice_56 dérive de la classe codice_2. Elle possède donc les mêmes méthodes.
La classe codice_56 possède les constructeurs suivants :
public FileStream(string path, System.IO.FileMode mode,
 [ System.IO.FileAccess access,
 [ System.IO.FileShare share,
 [ int bufferSize,
 [ System.IO.FileOptions options ] ] ] ] );
public FileStream(string path, System.IO.FileMode mode,
 [ System.IO.FileAccess access,
 [ System.IO.FileShare share,
 [ int bufferSize,
 [ bool useAsync ] ] ] ] );
public FileStream(string path, System.IO.FileMode mode,
 System.Security.AccessControl.FileSystemRights rights,
 System.IO.FileShare share,
 int bufferSize, System.IO.FileOptions options,
 [ System.Security.AccessControl.FileSecurity fileSecurity ] );
Les crochets indiquent les paramètres optionnels.

Programmation C sharp/Fonctions asynchrones