热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

动态类型dynamic和动态语言运行时DLR

1.动态类型与隐式申明的类型或者通过System.Object引用声明的类型有着巨大的不同,动态类型不是强类型的,对于C#编译器通过dynamic关键字声明的数据点可以分配任意初始值,而且可

1.动态类型与隐式申明的类型或者通过System.Object引用声明的类型有着巨大的不同,动态类型不是强类型的,对于C#编译器通过dynamic关键字声明的数据点可以分配任意初始值,而且可以在声明周期内重新分配任何新的值。

public void Func3()
        {
            dynamic t = 1;
            t = "hello";
            t = t.ToUpper();  //访问动态类型的公共成员,编译器将不会检查所指定的成员的有效性,知道运行时才知道所调用的动态数据是否支持指定的成员,参数,拼写等正确性。
            t = new List { "aaa", "bbb" };
        }


2.var关键字不能用于返回值、参数、类或者结构的成员。但是dynamic关键字可以。


3.调用一个动态数据的方法时,不能使用Lambda表达式和匿名方法,但可以使用基本的委托。动态数据点无法理解扩展方法,所有LINQ不能使用。


4.在构建一个需要大量使用后期绑定的.net应用程序时(反射),dynamic关键字可以节省大量代码。


5.DLR动态语言运行时,.net4.0发布,作为CLR的补充的运行时环境,DLR相关语言有IromPython和IromRuby,他们的代码库可以直接与C#进行互操作。


6.表达式树

DLR在特定条件下使用表达式树来获取动态调用的含义,信息被传递给运行时绑定器(可能是C#动态绑定器、IronPython动态绑定器等)。


7.使用动态类型简化后期绑定

public void Func4(Assembly asm)
        {
            //正常情况下的后期绑定调用
            Type type = asm.GetType("ConsoleApplication3.Class1");
            object obj = Activator.CreateInstance(type);  //创建实例
            MethodInfo mi2 = type.GetMethod("SetId");
            mi2.Invoke(obj, new object[] { 2 });  //调用有参数函数,参数为对象集合,依次传入

            //使用动态类型简化的后期绑定调用
            Type type2 = asm.GetType("ConsoleApplication3.Class1");
            dynamic obj2 = Activator.CreateInstance(type2);
            obj2.SetId(2);  //这里明显的简化了调用操作

        }


8.使用动态数据进行COM互操作



推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
author-avatar
天凉好个秋骄阳_213
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有