LE FORUM DES CERCLOSOPHES
LE FORUM DES CERCLOSOPHES
 
Retour au forum
 

Ajouter une réponse

Pseudo :    S'inscrire ?
Mot de passe :    Mot de passe perdu ?
Icône :
                                
                                
Message :
 
 
 
Smilies personnalisés
 
Options :
Notification par email en cas de réponse
Désactiver les smilies
Activer votre signature
 
 
Dernières réponses
Membre désinscrit
http://www.siteduzero.com/tutoriel-3-13866-c---cours-pour-debutants-avertis.html#part_13864

Le concept de variable est présent dans la majorité des langages.
Une variable est tout simplement l'association d'un nom (ou d'un symbole) à une valeur donnée, valeur qui peut varier au cours du programme (d'où le nom de variable).

En général, ce que contient une variable doit être typé, c'est-à-dire que le compilateur doit savoir à l'avance ce que contient la variable.
Les langages qui suivent ce précepte sont appelés langages à typage statique (à l'opposé de langages comme Python, langage à typage dynamique).
De plus, C# fait partie des langages qui sont dit à typage fort.
Cela signifie que la plupart des conversions implicites qui existent en C, par exemple (conversion void* <-> xxx*, cast implicite entre int et short...) n'existent pas dans C#, où tout doit être explicitement déclaré lorsque qu'il peut y avoir perte d'informations.

Dans .NET, il y a deux manières de stocker le contenu d'une variable : sur le tas ou sur la pile.
Le tas est en fait un espace de mémoire vive disponible pour le processus courant, c'est-à-dire l'ensemble de votre programme (et de ses thread, s'il y en a plusieurs). La pile est une zone mémoire privée allouée pour chaque thread.
A la différence du tas, il peut y avoir plusieurs piles, et celles-ci sont généralement plus rapides d'accès que le tas ; en contrepartie, elle peuvent contenir beaucoup moins de choses (la capacité maximum d'une pile est de l'ordre du Mo), tandis que la mémoire disponible sur le tas sera toujours suffisante pour votre programme.

La première méthode, qui consiste à allouer le contenu d'une variable sur le tas, est appelée l'allocation dynamique ; la deuxième méthode, qui consiste à allouer le contenu d'une variable sur la pile, est appelée l'allocation statique.
En C++, par exemple, le programmeur a la possibilité de choisir où il souhaite allouer le contenu de ses variables. Dans C#, le programmeur n'a pas le choix.
C'est pourquoi dans C#, on fait la distinction entre les types valeurs et les types références. Les instances des types valeurs sont stockées sur la pile, tandis que les instances de type référence sont stockées sur le tas.

Il faut bien comprendre cette différence entre type valeur et type référence.
Quand on manipule une variable qui contient un objet de type valeur, on manipule directement cet objet. Quand on manipule une variable qui contient un type référence, on manipule en fait une référence, une adresse vers un objet alloué sur le tas (en effet, chaque objet possède une adresse propre qui le localise physiquement dans le processus courant).
C'est tout à fait similaire aux notions de pointeur du C, et aux notions de références du C++.

Ainsi, si j'alloue un type valeur dans une variable var1, et qu'ensuite je copie cette variable var1 dans une autre variable var2, l'objet sera en fait dupliqué, c'est-à-dire que toute action sur l'une ou l'autre des variables ne changera pas l'état de l'autre : on aura donc affaire à deux objets uniques et indépendants.
Alors que si j'alloue un type référence dans une variable var1, et qu'ensuite je copie cette variable var1 dans une autre variable var2, les deux variables représenteront le même objet, c'est-à-dire que toute action sur l'une des deux variables se répercutera sur l'autre : on aura donc un objet unique référencé par deux variables.


Note : le stockage de données, hormis la mémoire système (ram en général), peut être effectuée de manière implicite (persistence) ou explicite (sauvegarde) sur n'importe quel support compatible avec le système (disque dur, cd, réseau...). dans ce cas, la mémoire joue le role de buffer. il y a également la gestion des accès distants grâce à diverses technologies et la notion d'interface.

Un cours complet :
http://tahe.developpez.com/dotnet/csharp/


Edité le 22-12-2008 à 15:13:14 par Scientosophe


 
Retour au forum
 
 
créer forum