zoukankan      html  css  js  c++  java
  • 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的使用场合最好贴近程序的终端
  • 相关阅读:
    【Linux】PS命令
    【Linux】多进程与多线程之间的区别
    【杂项】XML Schema和DTD的区别
    推荐一组强大的Collection类
    关于Decorator模式我的理解
    菜鸟白话设计模式系列
    PowerCollections研究: 第1弹竟就发现不少问题
    [白话设计模式] Singleton
    PowerCollection研究:第2枪小谈RemoveALL算法
    yield 关键字
  • 原文地址:https://www.cnblogs.com/fengfuwanliu/p/10556907.html
Copyright © 2011-2022 走看看