Pourquoi System.Int32 dérive-t-il de System.Object (par le biais de System.ValueType) un type de valeur alors que System.Object est un type de référence?Pourquoi Int32 est un type de valeur?
Répondre
Parce que System.ValueType
est ce qui nous permet d'utiliser boxing/unboxing en remplaçant certains membres virtuels de System.Object.
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.
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.
- 1. Pourquoi Int32.MaxValue * Int32.MaxValue == 1?
- 2. membres enum de type Int32
- 3. Pourquoi int32 a une valeur maximale 2^31 -1
- 4. Utilisation de Int32.Parse
- 5. Pourquoi est-ce que je peux passer un type de valeur Nullable dans un type de valeur non nullable? Je
- 6. comment classer la valeur de gridviewrow.cells [i] valeur dans int32?
- 7. Déterminer si un type est un type de référence ou un type de valeur
- 8. Coulée de Int32 à « Microsoft.DirectX.Direct3D.VertexShader »
- 9. Utilisation de la réflexion pour définir la valeur d'un Int32
- 10. Pourquoi le résultat d'une soustraction d'un paramètre Int16 d'une variable Int16 est-il un Int32?
- 11. LINQ - Sélectionnez Déclaration - La valeur null ne peut pas être attribué à un membre de type System.Int32 qui est une valeur non annulable de type
- 12. Expression.Constant (valeur, type) type est inconnu. Comment définir le type
- 13. LINQ to SQL Int16 est converti en Int32 Commandée SQL
- 14. Comment GetHashCode() est-il implémenté pour Int32?
- 15. SQLite & Int64 à Int32 coulé en C#
- 16. Est-ce qu'un Type représente une valeur numérique C#
- 17. Type de valeur et type de référence
- 18. Int32? avec IComparable
- 19. Convertir OracleParameter.Value à Int32
- 20. Convertir une liste (de KeyValuePair (Of String, Int32) dans un dictionnaire (de String, Int32) en utilisant .ToDictionary
- 21. Existe-t-il un équivalent de Random.Next (Int32, Int32) dans le framework .Net dans l'API Java?
- 22. Int32^i = gcnew Int32() est-il alloué sur le tas géré?
- 23. C# int, Int32 et énumérations
- 24. Gorm retourné type de valeur
- 25. Comment formater les numéros Int32?
- 26. Convertir int32 en int
- 27. Pourquoi la valeur de la clé étrangère est toujours zéro?
- 28. ce qui est des moyens de type valeur et le type de referance dans .net
- 29. Un problème avec le type de valeur de retour paramétré
- 30. Pourquoi est-ce que le type de modèle est incompatible avec le type attendu?
C'était bien pour une réponse courte :) – Josh