Pergunta

Eu tenho o seguinte código:

object var3 = 3;
Console.WriteLine(var3.GetType().ToString());
Console.WriteLine(typeof(object).ToString());

A saída é:

System.Int32
System.Object

Por que eles não são ambos System.Object?

Foi útil?

Solução

Se você está perguntando por que o boxedObject.getType () não retorna objeto .. Confira a imagem na seção 'Conversão de boxe' no Página de boxe e unboxing msdn. Boa pergunta btw .. pelo menos minha compreensão de sua pergunta.

Embora eu possa não estar tecnicamente correto, parece

  • Quando movido para a pilha, um novo objeto é criado - seu ponteiro de tipo definido para o objeto de tipo de valor original (aqui System.int32). Isso explica getType () (e também o erro se você tentar dividi -lo para um tipo diferente).
  • O valor real é então copiado para esse objeto.

Outras dicas

o GetType() A função retorna o tipo real da instância na variável.

Mesmo que sua variável seja declarada como object, na verdade é segurando uma caixa Int32 instância.

Ignorando o tópico do boxe, todas as classes herdam do objeto Type. Isso é verdade para tipos de referência e tipos de valor. GetType mostra o tipo mais derivado, que neste caso é System.int32.

Uma das poucas vezes que GetType retornará System.Object é se você fizer isso:

object var = new Object();
Console.WriteLine(var.GetType().ToString());

O boxe refere -se quando um tipo de valor é apontado por um tipo de referência. Geralmente isso é feito como um sistema. O tipo de retornará o tipo real mais derivado, não o tipo de referência.

class A
{
}

class B : A
{
}

class C : B
{
}

object obj1 = new ClassA();
ClassB obj2 = new ClassB();
ClassB obj3 = new ClassC();

Gettype fará coisas semelhantes para esses tipos.

System.Console.WriteLine(obj1.GetType().ToString());
System.Console.WriteLine(obj2.GetType().ToString());
System.Console.WriteLine(obj3.GetType().ToString());

Classe A
Classb
Classc

Isso não é realmente sobre boxe; isso é sobre o comportamento de GetType. Ele retorna o tipo de valor da variável, não do tipo que a variável era declarado com:

    object var4 = new List<string>();
    Console.WriteLine(var4.GetType().ToString());

não voltará System.Object qualquer.

As declarações de variável são informações apenas para compilar, enquanto a execução do método é o tempo de execução. Em outras palavras, não há como getType () pode saber que tipo o objeto foi declarado, pois só pode saber o tipo real do objeto em tempo de execução.

semelhante se você tivesse

class a
{
}

class b : a

a bInstance = new b();
bInstance.GetType();

A chamada para binstance.gettype () não tem como saber que a variável foi declarada como tipo 'a' e acho que você também não espera que ela retorne 'a'. No entanto, no exemplo acima, a minha abreviação de objeto e B é para sistema.Int32

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top