Je ne peux pas trouver une "bonne" explication pour cette...
Réponses
Trop de publicités?Console.WriteLine(typeof(string).IsClass); // true
C'est un type de référence.
Il ne peut pas être un type de valeur, comme des types de valeur ont besoin d'une taille connue pour la pile etc. Comme une référence de type, de la taille de la référence est connue à l'avance, même si la taille de la chaîne n'est pas.
Il se comporte comme vous vous attendez à une valeur de type à se comporter parce qu'il est immuable; c'est à dire qu'il n'a pas d'* changer une fois créé. Mais il y a beaucoup d'autres immuable de référence-types. Délégué instances, par exemple.
*=sauf pour l'intérieur de la StringBuilder
, mais vous ne le verrez plus jamais alors que c'est cela...
Les fondamentaux "explication" est basé sur le "quoi" est en fait stockées dans l'emplacement de mémoire allouée lorsque vous "déclarer" la variable pour la chose. Si la valeur réelle de la chose est stocké dans la mémoire de l'emplacement visé par le nom de la variable, alors c'est un type de valeur.
int x; // memory allocated to hold Value of x, default value assigned of zero
Si, otoh, que, l'emplacement de mémoire allouée lorsque vous "déclarer", la variable va contenir seulement quelques autre adresse mémoire où la valeur réelle (ou valeurs) sont enregistrées, alors c'est un type de référence.
MyClass x; // Memory allocated to hold an address,
// default address of null (0) assigned.
// NO MEMORY ALLOCATED for x itself
ou, si la déclaration comprend l'initialisation,
MyClass x = new MyClass();
// Now, Memory slot (call it Addr1) is allocated to hold address of x,
// more memory (call it Addr2) is allocated to hold a new MyClass object.
// New MyClass object created, stored in memory Addr2 (on the Heap)
// Address of new object (Addr2) is stored in Addr1
pour une chaîne, la chaîne est créé sur le Tas, et c'est l'adresse va dans l'emplacement de mémoire allouée pour la variable, c'est donc un type de référence.