2009-07-23 3 views
5

certains types simples comme int, string, .... sont faciles à réaliser qu'ils sont ValueTypes ou RefrenceTypes. Mais je veux savoir s'il y a un moyen de distinguer?Comment faire pour distinguer qu'un type est ValueType ou RefereceType?

+1

Cela dépend entièrement de votre langue/runtime. –

+0

Bien noté. Je suppose que c'est une question .NET/C#. Ai-je raison? –

+0

@ Martinho: exactement vous avez raison. – odiseh

Répondre

7

Tous les structs, enums et types natifs sont des types de valeurs.

Lors de l'exécution, vous pouvez vérifier comme ceci:

Type type = typeof(TypeName); 

if (type.IsValueType) 
{ 
    //... 
} 
+2

Seulement dans le monde .net. –

+0

Très bon point :-) –

4

Les chaînes ne sont pas des types de valeur.

Voici une liste des plus couramment utilisés value types:

  • bool (System.Boolean)
  • octet (System.Byte)
  • char (System.Char)
  • décimal (System.Decimal)
  • double (System.Double)
  • flotteur (System.Single)
  • int (System.Int32)
  • longue (System.Int64)
  • sbyte (System.SByte)
  • court (System.Int16)
  • uint (System.UInt32)
  • ulong (système. UInt64)
  • ushort (System.UInt16)
  • System.DateTime

Outre ceux-ci:

  • Tout type qui est un ENUM
  • Tout type qui est un struct

Tous les autres types sont des types de référence.

+0

En lisant votre commentaire, DateTime est un type de valeur. Alors qu'est-ce que ça veut dire? DateTime dt = new DateTime Merci – odiseh

+3

Je pense que vous confondez les types valeur/référence avec le fait que certains types contiennent ou non des littéraux. Les chaînes ont des littéraux de chaîne qui peuvent être utilisés pour les initialiser, mais ce ne sont pas des types de valeurs. DateTime n'a pas de littéraux, mais est un type de valeur. Cela signifie que lorsque vous passez un DateTime en tant que paramètre à une fonction ou que vous écrivez DateTime datetime1 = datetime2, la valeur est réellement copiée au lieu que les deux datetime se réfèrent au même objet. –

+0

Ce que Tal a dit est totalement juste. Le choix de ce qui obtient ou non des littéraux est totalement à la hauteur de la langue. Ce qui est et ce qui n'est pas un type de valeur est défini par le CLI lui-même. Par exemple, VB a des littéraux DateTime. On peut aussi avoir des littéraux de liste ou de hachage (boo, IronPython, IronRuby), et ce sont toujours des types de références. –

Questions connexes