Каково различие между переменной, объявленной столь же динамичными и переменной, объявленной как Система. Объект? Выполнение следующей функции, казалось бы, указало бы, что обе переменные брошены к корректному типу динамично:
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());
}
Разница в том, что MyTestVar2.ToUpper()
компилируется и работает, без явного приведения.
object
- обычный тип.
dynamic
- это, по сути, тип-заполнитель, который заставляет компилятор выдавать динамические поздние вызовы.
GetType()
- это обычная функция, определенная классом object
, которая работает над экземпляром, который вы вызываете.
GetType()
совершенно не зависит от объявленного типа переменной, которая ссылается на объект, на который вы ее вызываете. (за исключением nullables)
Вам, вероятно, следует начать с этой прекрасной статьи MSDN . Различия можно резюмировать очень кратко:
Во время компиляции элемент, который типизированный как динамический, предполагается, что он поддерживает любая операция.
System.Object
имеет только несколько поддерживаемых операций - ToString ()
, Equals ()
и т. Д.