2010-09-20 5 views

Répondre

12

Parce que System.ValueType est ce qui nous permet d'utiliser boxing/unboxing en remplaçant certains membres virtuels de System.Object.

+0

C'était bien pour une réponse courte :) – Josh

1

http://msdn.microsoft.com/en-us/library/system.valuetype.aspx explique assez bien:

types de données sont séparés en valeur types et les types de référence. Les types de valeur sont alloués en pile ou alloués en ligne dans une structure. Les types de référence sont alloués par tas. Les types de référence et de valeur sont dérivés de la classe de base ultime Objet.

Dans les cas où il est nécessaire pour un type de valeur à se comporter comme un objet, une enveloppe qui fait regarder le type de valeur comme un objet de référence est attribué sur le tas, et valeur du type de valeur est copiée dans ça. Le wrapper est marqué afin que le système sache que contient un type de valeur. Ce processus est connu sous le nom de boxe, et le processus inverse est connu comme unboxing. La boxe et unboxing permettent à n'importe quel type d'être traité comme un objet.

1

Référé de https://msdn.microsoft.com/en-us/magazine/cc301569.aspx

objets de type Value ont deux représentations: une forme unboxed et une forme en boîte. Les types de référence sont toujours sous forme de boîte.

Les types de valeur sont implicitement dérivés de System.ValueType. Ce type offre les mêmes méthodes que celles définies par System.Object. Cependant, System.ValueType remplace la méthode Equals pour qu'elle renvoie true si les valeurs des champs d'instance des deux objets correspondent. En outre, System.ValueType remplace la méthode GetHashCode afin qu'elle produise une valeur de code de hachage à l'aide d'un algorithme qui prend en compte les valeurs dans les champs d'instance des objets. Lors de la définition de vos propres types de valeurs, il est fortement recommandé de remplacer et de fournir des implémentations explicites pour les méthodes Equals et GetHashCode.

Questions connexes