Dilemma com o uso de tipos de valor com o operador `new` em C #

Quandooperator new() é usado com o tipo de referência, o espaço para a instância é alocado no heap e a própria variável de referência é colocada na pilha. Além disso, tudo dentro da instância do tipo de referência, alocado na pilha, é zerad
Por exemplo, aqui está uma classe:

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

No código a seguir:

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

p variável @ está na pilha e a instância criada dePerson (todos os seus membros) está na pilha.p.id seria0 ep.name serianull. Esse seria o caso, porque tudo o que foi alocado no heap é zerad

gora, estou confuso sobre se estou usando um tipo de valor comnew operador. Por exemplo, leve em consideração a seguinte estrutura:

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);
    }
}

gora, eu gostaria de saber o que as seguintes linhas do main faze

        Date someDate;
        someDate= new Date();

Na primeira linhasomeDate variável @ está alocada na pilha. Precisamente 12 bytes.
Minha pergunt é o que acontece na segunda linha? O queoperator new() Faz? Zera apenas os membros deDate estrutura ou aloca espaço na pilha também? Por um lado, eu não esperarianew para alocar espaço no heap, é claro, porque na primeira linha a memória já está alocada na pilha para a instância da estrutura. Por outro lado, eu esperarianew para alocar espaço na pilha e endereço de retorno desse espaço, porque é isso quenew deveria fazer. Talvez seja porque eu sou proveniente de experiência em C ++.

No entanto, se a resposta for: "quandonew é usado com tipos de valor, zera apenas os membros do objeto ", do que é um significado um pouco inconsistente denew operador porque:

quando usarnew com tipos de valor, zera apenas os membros do objeto na pilhaquando usarnew com tipos de referência, ele aloca memória no heap para a instância e esvazia seus membros

Desde já, obrigado
Felicidade

questionAnswers(5)

yourAnswerToTheQuestion