static void UseObjectVarible()
{
object o = new Person() { FirstName = "Mike", LastName = "Larson" };
Console.WriteLine(o.GetType());
}
static void ChangeDynamicDataType()
{
dynamic t = "Hello!";
Console.WriteLine("t is of type: {0}", t.GetType());
t = false;
Console.WriteLine("t is of type: {0}", t.GetType());
t = new List<int>();
Console.WriteLine("t is of type: {0}", t.GetType());
}
static void ChangeObjectDataType()
{
object t = "Hello!";
Console.WriteLine("t is of type: {0}", t.GetType());
t = false;
Console.WriteLine("t is of type: {0}", t.GetType());
t = new List<int>();
Console.WriteLine("t is of type: {0}", t.GetType());
}
static void ChangeVarDataType()
{
var t = "Hello!";
Console.WriteLine("t is of type: {0}", t.GetType());
t = false;
Console.WriteLine("t is of type: {0}", t.GetType());
t = new List<int>();
Console.WriteLine("t is of type: {0}", t.GetType());
}
(1)在插图中,有什么不对吗?
(2)我期望这一个,Console.WriteLine(o.GetType());
应该是对象类型,但它显示MyProjectNamespace.Person类型。
请参阅ChangeDynamicDataType()
(1)当鼠标悬停在由“Hello”指定的每个t上时,它显示动态类型(动态t)。但是t.GetType()的结果是String。
在编译之前,我可以说t总是像IntelliSense显示的动态类型吗?在编译之后,我可以说t的类型得到隐式类型转换为分配给t的值的类型吗?
请参阅ChangeObjectDataType()
类似于1。
我期待这样的结果:
对象,对象,对象。
但它显示了String,Boolean,Generic
为什么我的期望错了?
请参阅ChangeVarDataType()
当我鼠标悬停在每个t上时,我可以看到类型已经隐式类似(string t,boolean t,List t)。那么我能否确切地说这意味着在var的情况下,甚至在编译之前,变量的类型会根据赋给变量t的值的类型进行隐式转换?
在方法中,局部变量有这些声明:
动态t,对象t var t。
它们在记忆中分配到哪里?
特别是,在对象t的情况下,对象类型是引用类型,所以在我的下面,它需要new关键字来在托管堆中分配对象,如下所示:
对象t = new Object();
如何在没有new关键字的情况下分配对象类型变量(可能在内存堆中)?