3. Tipos valor
• Tipos de dados primitivos;
• No momento da declaração da variável, um
espaço suficiente para armazenar aquele tipo
de dado é alocado na memória;
• No momento da atribuição de valor a variável,
o valor é copiado para esse espaço na
memória.
4. Tipos referência
• Tipos de classe;
• No momento da declaração de um objeto, o
compilador aloca uma pequena porção da
memória suficiente para armazenar um
endereço de memória;
• No momento da criação do objeto, um espaço
na memória é alocado para ele, e o endereço
desse espaço é gravado na primeira porção de
memória alocada.
5. Parâmetros ref e out
• Quando você passa um argumento por
parâmetro para um método, independente do
tipo (valor ou referência), o parâmetro é
iniciado com uma cópia do argumento.
6. Parâmetros ref e out
static void Inc(int p)
{
p++;
}
static void Main()
{
int i = 42;
Inc(i);
Console.WriteLine(i);
}
7. ref
• Usando a palavra ref como prefixo de um
parâmetro, o parâmetro torna-se uma
referência ao argumento real em vez de uma
cópia do argumento.
8. Parâmetros ref
static void Inc(ref int p)
{
p++;
}
static void Main()
{
int i = 42;
Inc(ref i);
Console.WriteLine(i);
}
9. out
• A palavra chave out é uma abreviação de
output (saída). Quando você passa um
parâmetro out para um método, o método
tem que atribuir um valor a ele.
10. Parâmetros out
static void Inc(ref int p)
{
p++;
}
static void Main()
{
int i = 42;
Inc(ref i);
Console.WriteLine(i);
}
11. Classe System.Object
• Um dos tipos referência mais importantes do
.NET Framework;
• Todas as classes herdam da System.Object;
• É possível criar uma variável do tipo Object e
usar para referenciar qualquer tipo de objeto;
• Para criar uma variável do tipo System.Object,
podemos utilizar a palavra reservada object.
12. Box
• Box: Cópia automática de um valor
armazenado na pilha para o heap;
• Exemplo:
int i = 10;
object o = i;
13. Unbox
• Unbox: Extração do valor armazenado no
heap para a pilha;
• Exemplo:
object o = 10;
int i = (int)o;