Guid se crean utilizando el new palabra clave que me hace pensar que es un tipo de referencia.

Es esto correcto?

Guid uid = new Guid();

Son Guid almacenados en el montón?

InformationsquelleAutor SoftwareGeek | 2010-02-26

6 Comentarios

  1. 36

    Se puede ver la definición de un Guid ti mismo:

    public struct Guid ...

    O usted puede probar como esta:

    bool guidIsValueType = typeof(Guid).IsValueType;

    GUID se crean utilizando el nuevo
    la palabra clave que me hace pensar que es un
    tipo de referencia.

    Estructuras pueden tener constructores demasiado, por ejemplo new DateTime(2012, 12, 23).

    • No es un Tipo de Valor -> ver @Randolpho la respuesta
  2. 37

    Guid es un Tipo de Valor.

    Ver MSDN. Tenga en cuenta que el Guid es un struct. Todas las estructuras son Los Tipos De Valor.

    • Excepto, por supuesto, para el Sistema.ValueType que es en realidad una clase 🙂
    • Cierto, pero también es abstracta, por lo que no hay peligro de creación de instancias.
  3. 17

    GUID de que se crean mediante la palabra clave new que me hace pensar que es un tipo de referencia.

    Dejar de pensar en eso. Los tipos de valor que pueden tener constructores demasiado. Es perfectamente legal, aunque extraño, a decir

    int x = new int();

    Que es la misma que la asignación de cero para x.

    Es esto correcto?

    Nope.

    Son GUID se almacena en el montón?

    Sí. Guid también se almacenan en la pila.

    Tenga en cuenta que el análisis que sigue se supone que la aplicación de la CLI es el de Microsoft «escritorio» o «Silverlight» CLR que se ejecutan en Windows. No tengo idea de lo que otras versiones de la CLI hacer, lo que hacen en los Macs, y así sucesivamente. Si usted necesita para saber si un determinado trozo de la memoria se almacena en la pila en otras implementaciones, usted tendrá que pedir a alguien que es un experto en esas implementaciones.

    Un Guid es almacenado en la pila bajo las siguientes circunstancias:

    (1) cuando el Guid es un «temporal» resultado de un curso de cálculo o está siendo utilizado como un argumento a un método. Por ejemplo, si usted tiene una llamada al método M(nuevo Guid()) entonces almacenamiento temporal para el nuevo Guid se almacena en la pila.

    (2) cuando el Guid es una variable local que es (un) no en un iterador bloque, (b) no es un cerrado de más de variable externa de un método anónimo o expresión lambda.

    En todas las demás situaciones, el Guid no se almacena en la pila. Un Guid es almacenado en la pila cuando se trata de un campo de un tipo de referencia, un elemento de matriz, un cerrado sobre locales de un método anónimo o expresión lambda, o un local en un iterador bloque.

    Un Guid también pueden ser almacenados, ni en el montón de GC ni la pila. Un Guid podría ser almacenados en completamente la memoria no administrada, se accede a través de inseguro aritmética de punteros.

    Soy curioso en cuanto a por qué te importa tanto si los bits de un guid en la pila o en el montón. ¿Qué diferencia hace?

    • bien, ahora que es claro que la guid puede ser almacenado en cualquier lugar, supongo que a nadie le importa.
    • Cuando la escritura de la suave-aplicaciones en tiempo real (animación, juegos, algunos de IU de trabajo), a menudo es necesario reducir, amortizar, o eliminar GC asignaciones dentro de un «loop» (bucle o iteración del software. Al hacerlo, reduce o elimina la GC colecciones dentro de los bucles, que causa la animación de «enganches» que son visibles para el usuario. Por lo tanto, saber si una determinada línea de código «asignaciones» es necesario para decidir cuándo caché de objetos o uso de la agrupación de objetos. Ejemplo: suave en tiempo real de las simulaciones de física escrito completamente en C# no se debe asignar en el colisionan o la integración de las fases.
  4. 6

    Es en realidad Guid. Todos los tipos son construidos usando el new palabra clave. Usted puede identificar los tipos de referencia de los tipos de valor por si son una clase, interfaz, o delegado (todos los tipos de referencia), o un struct o enum (tipos de valor).

    • Es posible que desee agregar enum a tu lista de tipos de valor.
  5. 1

    Su tipo de valor, Vea el ejemplo de abajo:

    using System;                   
    public class Program
    {
        public static void Main()
        {
            Guid a1 = new Guid();
            Console.WriteLine(a1);
            Guid b1 = a1;
            Console.WriteLine(b1);
            a1 = Guid.NewGuid();
            Console.WriteLine(a1);
            Console.WriteLine(b1);
        }
    }
    
    /* OUTPUT
    00000000-0000-0000-0000-000000000000
    00000000-0000-0000-0000-000000000000
    164f599e-d42d-4d97-b390-387e8a80a328
    00000000-0000-0000-0000-000000000000
    */

Dejar respuesta

Please enter your comment!
Please enter your name here