C#-----var, object, dynamic的区别以及dynamic、ExpandoObject的使用

   1.var, object, dynamic

    var是C# 3中引入的,其实它仅仅只是一个语法糖。var本身并不是一种类型,其它两者object和dynamic是类型

    var声明的变量在赋值的那一刻,就已经决定了它是什么类型

下面这样声明,就会有编译错误:

    var a = 1;

    a = "Test";

    object之所以能够被赋值为任意类型的原因,其实都知道,因为所有的类型都派生自object. 所以它可以赋值为任何类型

同样的声明,下面就不会有编译错误:

    object a = 1;

    a = "Test";

    dynamic它是C#引入的新类型,它的特点是申明为dynamic类型的变量,不是在编译时候确定实际类型的, 而是在运行时

下面这样声明,不会有编译错误,运行时会报错:

    dynamic a = "test";

    a++;

    Console.WriteLine(a);

   2.dynamic、ExpandoObject

   在传递对象,但是又不想创建一个class或者struct的时候,ExpandoObject就是一个非常好的选择

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            List<ExpandoObject> edoList = new List<ExpandoObject>();
            dynamic edoFirst = new ExpandoObject();
            edoFirst.userName = "yyx";
            edoFirst.userPwd = "123456";
            edoList.Add(edoFirst);

            dynamic edoSecond = new ExpandoObject();
            edoSecond.userName = "zy";
            edoSecond.userPwd = "654321";
            edoList.Add(edoSecond);

            foreach (dynamic edo in edoList)
            {
                Console.WriteLine(edo.userName+" "+ edo.userPwd);
            }
            Console.ReadLine();
        }
    }
}

   ExpandoObject使用注意:

  • ExpandObject不能用于太复杂的对象
  • ExpandObject的使用范围必须要短
  • ExpandObject的使用场合最好贴近程序的终端

猜你喜欢

转载自www.cnblogs.com/fengfuwanliu/p/10556907.html