编程语言应用

注册

 

发新话题 回复该主题

C动态类型是dynamic,如何 [复制链接]

1#
C#核心开发-第19单元-动态编程和异步编程-第1节:动态类型C#核心开发-动态类型1.什么是动态类型?C#是一种静态类型的语言,使用静态类型的好处是C#编译器可以在编译时检查大部分的工作,能够找出更多的错误,使程序更加健壮。优先使用静态类型,静态类型比动态类型更高效,动态类型和在运行时创建表达式树都会带来性能上的影响。C#中的动态类型只是给你一种解决数据类型的一种方案,主要是与使用动态类型的环境进行交互使用的。2.动态类型基本语法在C#中,动态类型使用dynamic关键字表示,动态类型是在运行时解析,与var推断类型是完全不一样的,var还是静态类型,可推断出类型。如下图是在.NET控制台应用程序的Main()方法中使用dynamic类型定义变量。在图1中,由于程序还未运行,所以不清楚intA变量的具体类型。dynamic定义变量在图2中,其实已经知道intB变量的类型是int,因为intB是使用var关键字定义的,可根据值推断出类型。下面我们打上断点,调试一下:调试dynamic定义的变量在图3中,我们发现,intA动态类型在运行后,其类型变成了object,装箱了,这肯定存在性能损失。由于动态类型是在运行时解析的,所以其值的类型可以不断地发生变化:在图4中,intA由int类型改变为string类型,再改变为bool类型,经历了3种数据类型的转换。这种转换在C#的动态类型中是允许的。如下图调试一下intA变量类型的变化:最后解析出来的是bool类型包装到object类型中。3.方法返回动态类型C#中的dynamic动态类型是可以作为方法的返回类型存在的。现在我们在VisualStudio中创建一个类,并添加几个属性,然后在Program类中编写一个方法,将dynamic作为方法的返回类型,并将类的对象返回:类中定义属性图6是一个名称为Student的类,再编写一个方法在Program类中:图7的GetData()方法的返回类型是dynamic,而实际返回的是Student对象,调用一下此方法:由于GetData()方法返回的是dynamic类型,所以也需要定义一个dynamic类型的变量接收。注意,虽然我们知道s接收的是Student的对象,但是由于dynamic是运行时解析的,所以s打点是出不来属性的:在图9没有智能提示出来,因为此时并不知道s是具体什么类型。但可以硬写上属性,并赋值,调用具有dynamic类型的方法完整代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceYidosoft.Edu.Csharp.DynamicAsync{classProgram{staticvoidMain(string[]args){Console.Title=一都编程-动态类型;Programprogram=newProgram();dynamics=program.GetData();s.Id=11;s.Name=小花;Console.ReadKey();}}}从图10上看,硬性对属性赋值也是起作用,运行后得到了类型是Student。C#深入编程-线上视频图文课堂配套课后技能作业+理论考试+源码淘宝¥购买已下架
分享 转发
TOP
发新话题 回复该主题