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:
new
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 membrosDesde já, obrigado
Felicidade