C#object,var,动态类型变量

时间:2017-12-03 01:36:19

标签: c# object dynamic var

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. 请参阅UseObjectVarible() 我考虑过这样的对象分配: enter image description here
  2. (1)在插图中,有什么不对吗? (2)我期望这一个,Console.WriteLine(o.GetType());应该是对象类型,但它显示MyProjectNamespace.Person类型。

    1. 请参阅ChangeDynamicDataType()
      (1)当鼠标悬停在由“Hello”指定的每个t上时,它显示动态类型(动态t)。但是t.GetType()的结果是String。 在编译之前,我可以说t总是像IntelliSense显示的动态类型吗?在编译之后,我可以说t的类型得到隐式类型转换为分配给t的值的类型吗?

    2. 请参阅ChangeObjectDataType()
      类似于1。 我期待这样的结果:
      对象,对象,对象。 但它显示了String,Boolean,Generic 为什么我的期望错了?

    3. 请参阅ChangeVarDataType()
      当我鼠标悬停在每个t上时,我可以看到类型已经隐式类似(string t,boolean t,List t)。那么我能否确切地说这意味着在var的情况下,甚至在编译之前,变量的类型会根据赋给变量t的值的类型进行隐式转换?

    4. 在方法中,局部变量有这些声明:
      动态t,对象t var t。
      它们在记忆中分配到哪里?
      特别是,在对象t的情况下,对象类型是引用类型,所以在我的下面,它需要new关键字来在托管堆中分配对象,如下所示:
      对象t = new Object();
      如何在没有new关键字的情况下分配对象类型变量(可能在内存堆中)?

0 个答案:

没有答案