c# est COURT ou de type de données, il est toujours INT?
Je fais un certain classement et je ne suis pas sûr:
INT est une primitive de type de données avec le mot-clé "int"
Mais je peux utiliser Int16,Int32 ou Int64 - je sais C# a ses propres noms pour eux. Mais qui sont ces types de données ou il est toujours INT? Et surtout, peut-on dire "court" est un type de données ou INT16 est un type de données?
Merci 🙂
OriginalL'auteur Monty | 2010-08-07
Vous devez vous connecter pour publier un commentaire.
En C#, les choses suivantes sont toujours vraies:
short
==Int16
ushort
==UInt16
int
==Int32
uint
==UInt32
long
==Int64
ulong
==UInt64
Les deux versions sont des types de données. Tous les ci-dessus sont des nombres entiers de différentes longueurs et signé-ness.
La principale différence entre les deux versions (autant que je sache) est de quelle couleur ils sont mis en évidence comme dans Visual Studio.
Int32
, mais pasint
.La différence est que la colonne de gauche contient le code C# de noms, qui sont préférables. L'exception est que les appels aux méthodes statiques et les propriétés de ces classes, qui devrait être à la CLR noms.
n'oubliez pas,
typeof(int)
est Int32, et il s'affichera en tant que tels dans les traces de pile, etc. Donc c'est toujours bon à savoir.tous les types dans les colonnes de gauche sont des alias pour les types dans la colonne de droite! La seule différence entre l'utilisation de ces types est syntaxique. Les types sur la gauche sont là pour faire les programmeurs faciliter la vie.
Vous pouvez toujours utiliser
int
comme un nom, vous avez juste besoin de le préfixer avec @ - par exemple:int @int = 0;
. Le nom est encoreint
. Je ne recommanderais pas ce bien 🙂OriginalL'auteur Mike Caron
short
est un type de données représentant des entiers de 16 bits (1 commande ci-dessousint
, qui est de 32 bits).Int16
est en fait aussi un type de données et est synonyme deshort
. C'est,renvoie également un
short
, de même que:En va de même avec
Int32
pourint
etInt64
pourlong
.OriginalL'auteur BoltClock
En C#,
int
est juste un moyen plus court de dire du Système.Int32..NET, même les types de données primitifs sont en fait des objets (dérivé du Système.De l'objet).
Donc un int en C# = un nombre Entier dans VB.Net = Système.Int32.
il y a un tableau de tous les .NET des types de données ici: http://msdn.microsoft.com/en-us/library/47zceaw7%28VS.71%29.aspx
Ce est de la partie .NET Système De Type Commun qui permet une interopérabilité transparente entre .NET languages.
C'est de Java. Dans .NET, des types de valeur peut être stockées "unboxed", mais ils ont encore logiquement déduire de
System.Object
, de sorte qu'ils peuvent toujours être utilisés où uneObject
est nécessaire. Et oui, cela signifie qu'ils sont automatiquement placés dans une boîte, avec la version boîte étant explicitement dérivé deObject
.Je pense que vous avez tous les deux raison. Derrière les coulisses, l'int est généralement de 4 octets morceau de la mémoire, mais logiquement, c'est une structure dérivée de l'objet, et de la nécessaire automatique de boxe qui arrive à maintenir cette apparence. Alors, vraiment, qu'il soit ou non un objet dépend du niveau conceptuel dont vous parlez.
Donc j'ai vérifié Richter CLR via C# et je pense que ce qui se passe est: tous les types de valeur dériver à partir du Système.ValueType et du Système.ValueType lui-même dérive du Système.Objet. Donc dire que toutes les primitives sont des objets est en effet correct! ValueTypes sont allouées sur la pile. Boxe alloue la mémoire nécessaire sur le tas plus de deux autres champs (de type pointeur d'objet et de synchronisation de bloc d'index) requis par les objets sur le tas, puis copie le ValueType dans le nouvellement alloué la mémoire du tas. La boxe ne se fait pas automatiquement, mais le compilateur c# insère le code IL nécessaire pour la boxe automatiquement
...c'est donc tous les objets, mais des objets sur la pile se comporter différentes que objets sur le tas. Donc, la différence n'est pas dans "les choses qui découlent de l'objet" et "des choses qui ne dérivent pas de l'objet", mais "pile" et "tas". IIRC c++/CLI permet de mettre des objets arbitraires (c'est à dire pas des objets ne proviennent pas de l'ValueType) sur la pile.
OriginalL'auteur David
Ce qui n'a pas été mentionné dans aucune des autres réponses, c'est le type de la valeur
System.IntPtr
, dont le peu de largeur de plate-forme spécifique; par exemple, sur un système 32 bits, il est de 32 bits de large, tandis que sur un système 64 bits, il est de 64 bits de large.Cela étant dit, de tout ce que je peux recueillir ce type n'est pas destiné à être utilisé à la place de tout autre
int
types; son utilisation principale réside probablement avec P/Invoke-ing pour le sous-système de l'API, où il est normalement utilisé pour la tenue de pointeurs.OriginalL'auteur stakx