Различие между динамическим и Системой. Объект

Каково различие между переменной, объявленной столь же динамичными и переменной, объявленной как Система. Объект? Выполнение следующей функции, казалось бы, указало бы, что обе переменные брошены к корректному типу динамично:

void ObjectTest()
{
    System.Object MyTestVar = "test";
    dynamic MyTestVar2 = "Testing 123";

    Console.WriteLine("{0}", MyTestVar.GetType());
    Console.WriteLine("{0}", MyTestVar2.GetType());

    MyTestVar = 123;
    MyTestVar2 = 321;

    Console.WriteLine("{0}", MyTestVar.GetType());
    Console.WriteLine("{0}", MyTestVar2.GetType());
}
13
задан Icemanind 12 August 2010 в 01:22
поделиться

2 ответа

Разница в том, что MyTestVar2.ToUpper() компилируется и работает, без явного приведения.

object - обычный тип.
dynamic - это, по сути, тип-заполнитель, который заставляет компилятор выдавать динамические поздние вызовы.

GetType() - это обычная функция, определенная классом object, которая работает над экземпляром, который вы вызываете.
GetType() совершенно не зависит от объявленного типа переменной, которая ссылается на объект, на который вы ее вызываете. (за исключением nullables)

10
ответ дан 1 December 2019 в 23:46
поделиться

Вам, вероятно, следует начать с этой прекрасной статьи MSDN . Различия можно резюмировать очень кратко:

Во время компиляции элемент, который типизированный как динамический, предполагается, что он поддерживает любая операция.

System.Object имеет только несколько поддерживаемых операций - ToString () , Equals () и т. Д.

4
ответ дан 1 December 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: