2009-07-23 4 views
5

algunos tipos simples como int, cadena, .... son fáciles de entender que son ValueTypes o RefrenceTypes. Pero quiero saber si hay alguna forma de distinguirlo.¿Cómo distinguir que un tipo es ValueType O RefereceType?

+1

Eso depende por completo de su idioma/tiempo de ejecución. –

+0

Bien notado. Supongo que esta es una pregunta de .NET/C#. ¿Estoy en lo cierto? –

+0

@ Martinho: exactamente tienes razón. – odiseh

Respuesta

7

Todas las estructuras, enumeraciones y tipos nativos son tipos de valor.

En tiempo de ejecución se puede comprobar de esta manera:

Type type = typeof(TypeName); 

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

Solo en el mundo .net. –

+0

Muy buen punto :-) –

4

Las cadenas no son tipos de valores.

Aquí está una lista de los más comúnmente utilizados value types:

  • bool (System.Boolean)
  • byte (System.Byte)
  • char (System.Char)
  • decimal (System.Decimal)
  • doble (System.Double)
  • flotador (System.Single)
  • int (System.Int32)
  • largo (System.Int64)
  • sbyte (System.SByte)
  • corto (System.Int16)
  • uint (System.UInt32)
  • ulong (Sistema. UInt64)
  • ushort (System.UInt16)
  • System.DateTime

Además de los:

  • Cualquier tipo que es una enumeración
  • Cualquier tipo que es un struct

Todos los otros tipos son los tipos de referencia.

+0

Leyendo su comentario, DateTime es un tipo de valor. Así que, ¿qué significa? DateTime dt = new DateTime Gracias – odiseh

+3

Creo que confunde tipos de valor/referencia con si ciertos tipos tienen literales o no. Las cadenas tienen literales de cadena que se pueden usar para inicializarlos, pero no son tipos de valores. DateTime no tiene ningún literal, pero es un tipo de valor. Lo que eso significa es que cuando pasa un DateTime como parámetro a una función, o escribe DateTime datetime1 = datetime2, el valor se copia realmente en lugar de ambos datetime refiriéndose al mismo objeto. –

+0

Lo que Tal dijo es totalmente correcto. La elección de lo que obtiene o no los literales depende totalmente del idioma. Lo que es y lo que no es un tipo de valor lo define la propia CLI. Por ejemplo, VB tiene literales DateTime. Uno también puede tener listas o hash literales (boo, IronPython, IronRuby), y esos todavía son tipos de referencia. –

Cuestiones relacionadas