Est-ce que ssortingng est un type de valeur ou un type de référence?

Est-ce que ssortingng est un type de valeur ou un type de référence?

Je n’arrive pas à trouver une “bonne” explication pour ça …

 Console.WriteLine(typeof(ssortingng).IsClass); // true 

C’est un type de référence.

Il ne peut pas s’agir d’un type de valeur, car les types de valeur ont besoin d’une taille connue pour la stack, etc. En tant que type de référence, la taille de la référence est connue à l’avance, même si la taille de la chaîne ne l’est pas.

Il se comporte comme si vous vous attendiez à ce qu’un type de valeur se comporte car il est immuable; c’est-à-dire qu’il ne change pas une fois créé. Mais il y a beaucoup d’autres types de référence immuables. Déléguer des instances, par exemple.

* = sauf à l’intérieur de SsortingngBuilder , mais on ne le voit jamais pendant qu’il fait ça …

Ssortingng est un type de référence immuable.

Voir l’article sur le blog Des types immuables: comprendre leurs avantages et les utiliser pour leur immuabilité.

Ssortingng est un type de référence .

La “explication” fondamentale est basée sur “quoi” est réellement stocké dans l’emplacement de mémoire alloué lorsque vous “déclarez” la variable pour la chose. Si la valeur réelle de la chose est stockée dans l’emplacement de mémoire référencé par le nom de la variable, il s’agit alors d’un type de valeur.

  int x; // memory allocated to hold Value of x, default value assigned of zero 

Si, otoh, la fente de mémoire allouée lorsque vous “déclarez” la variable ne contiendra qu’une autre adresse de mémoire où la ou les valeurs réelles seront stockées, alors il s’agit d’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 inclut une 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éée sur le tas et son adresse est insérée dans l’emplacement mémoire alloué à la variable. Il s’agit donc d’un type de référence.

Ssortingng est un type de référence immuable qui possède certaines qualités qui lui donnent l’apparence occasionnelle d’être un type de valeur

Le type de chaîne représente une séquence de zéro ou plusieurs caractères Unicode. ssortingng est un alias pour Ssortingng dans le .NET Framework.

Bien que ssortingng soit un type de référence, les opérateurs d’égalité (== et! =) Sont définis pour comparer les valeurs des objects chaîne, pas les références. Cela rend le test de l’égalité des chaînes plus intuitif. Par exemple:

 ssortingng a = "hello"; ssortingng b = "h"; // Append to contents of 'b' b += "ello"; Console.WriteLine(a == b); Console.WriteLine((object)a == (object)b); 

Cela affiche “True” puis “False” car le contenu des chaînes est équivalent, mais a et b ne font pas référence à la même instance de chaîne.

Les chaînes sont immuables – le contenu d’un object chaîne ne peut pas être modifié après la création de l’object, bien que la syntaxe le fasse apparaître comme si vous pouviez le faire. Par exemple, lorsque vous écrivez ce code, le compilateur crée en fait un nouvel object chaîne pour contenir la nouvelle séquence de caractères et ce nouvel object est affecté à b. La chaîne “h” est alors admissible à la récupération de place.

 ssortingng b = "h"; b += "ello"; 

Dans de nombreux langages, il existe deux types généraux d’éléments: ceux où un emplacement de stockage d’un type défini contiendra réellement un object de ce type et ceux où un emplacement de stockage d’un type défini contiendra une référence à un object de ce type. qui est stocké ailleurs. Il existe également un certain nombre de types de sémantique que les choses peuvent offrir:

  1. Sémantique de la valeur immuable: les instances d’un type particulier ont une caractéristique (“la valeur”) qui constitue la base de l’identité. Deux éléments dont la valeur est égale peuvent être utilisés indifféremment, quel que soit l’endroit où ils sont stockés. La valeur sera constante tant que l’instance existe. Une variable d’un tel type peut avoir sa valeur modifiée, mais seulement en stockant une instance différente dans la variable.
  2. Sémantique de référence immuable: généralement similaire à la sémantique de valeur immuable, sauf que deux instances créées à des moments différents se rapportent à des instances différentes.
  3. Sémantique de la valeur Mutable: les instances d’un type particulier ont certaines caractéristiques ou collections de caractéristiques (“les valeurs”) qui forment la base de l’identité, mais ces caractéristiques peuvent être modifiées sans remplacer l’instance entière. Chaque instance est stockée précisément dans une variable ou un champ; Copier une variable ou un champ dans une autre copie toutes les valeurs d’une première instance à l’autre, mais les instances restnt séparées. Les modifications futures d’une instance n’affecteront pas l’autre.
  4. Sémantique de référence mutable: chaque instance est identique à elle-même, mais aucune autre entité, et les instances ont une ou plusieurs valeurs pouvant être modifiées dans les instances existantes. Un nombre quelconque de variables ou de champs peut contenir une référence à une instance. Copier une variable de champ ou de champ dans une autre fait simplement que la seconde se réfère à la même instance que la première. Par conséquent, toute modification de l’instance à laquelle l’une des variables fait référence affectera l’instance mentionnée par l’autre (la même instance).

Dans certains langages de programmation tels que C ++, il est possible pour les types à stockage direct et à référence indirecte d’implémenter l’un des quatre types de sémantique ci-dessus. En .net et C #, les types stockés directement avec des champs exposés implémentent toujours # 3, les types de classes avec des champs exposés implémentent toujours # 4, les autres types de valeurs peuvent implémenter les types ci-dessus et d’autres types de références ou # 4, mais pas # 3, avec une abstraction qui ne fuit que légèrement. Les chaînes implémentent # 1.

Peut-être que l’article Ssortingngs de .NET et C # peut vous aider. Selon cet article, ssortingng est un type de référence.