Dilema con el uso de tipos de valor con el operador `new` en C #

Cuandooperator new() se usa con el tipo de referencia, el espacio para la instancia se asigna en el montón y la variable de referencia se coloca en la pila. Además de eso, todo dentro de la instancia del tipo de referencia, que se asigna en el montón, se pone a cero.
Por ejemplo, aquí hay una clase:

class Person
{
    public int id;
    public string name;
}

En el siguiente código:

class PersonDemo
{
    static void Main()
    {
        Person p = new Person();
        Console.WriteLine("id: {0}  name: {1}", p.id, p.name);
    }
}

p variable está en la pila y la instancia creada dePerson (todos sus miembros) está en el montón. @p.id sería0 yp.name seríanull. Este sería el caso porque todo lo asignado en el montón está puesto a cero.

hora, lo que me confunde es si estoy usando un tipo de valor connew operador. Por ejemplo, tenga en cuenta la siguiente estructura:

struct Date
{
    public int year;
    public int month;
    public int day;
}

class DateDemo
{
    static void Main()
    {
        Date someDate;
        someDate= new Date();

        Console.WriteLine("someDate is: {0}/{1}/{2}", 
            someDate.month, someDate.day, someDate.year);
    }
}

Ahora me gustaría saber qué hacen las siguientes líneas desde main:

        Date someDate;
        someDate= new Date();

En primera líneasomeDate variable se asigna en la pila. Precisamente 12 bytes.
Mi pregunt es lo que pasa en la segunda línea? Que haceoperator new() do? ¿Solo pone a cero a los miembros deDate estructura o también asigna espacio en el montón? Por un lado, no esperaríanew para asignar espacio en el montón, por supuesto, porque en la primera línea la memoria ya está asignada en la pila para la instancia de estructura. Por otro lado, esperaríanew para asignar espacio en el montón y la dirección de retorno de ese espacio, porque eso es lo quenew debería hacer. Tal vez esto se deba a que vengo del fondo de C ++.

Sin embargo, si la respuesta es: "cuandonew se usa con tipos de valor, solo pone a cero los miembros del objeto ", que es un significado un poco inconsistente denew operador porque:

cuando usasnew con tipos de valor, solo pone a cero miembros del objeto en la pilacuando usasnew con tipos de referencia, asigna memoria en el montón para la instancia y pone a cero sus miembros

Gracias por adelantado
Aclamacione

Respuestas a la pregunta(5)

Su respuesta a la pregunta