.NET 数据类型之动态类型(Dynamic)

摘要:
在大多数情况下,动态类型的行为与对象类型相同。但是,包含动态类型表达式的操作不会被编译器解析或检查类型。因此,dynamic类型只在编译时存在,在运行时不存在。下面的类定义在几个不同的声明中使用了dynamic。类示例类{staticdynamicfield;dynamicrop{get;set;}publicdynamicexampleMethod{dynamicocal=“Localvariable”;inttwo=2;if{returnlocal;}否则{returntwo;}}在显式类型转换中,它是转换的目标类型。StaticvoidconvertToDynamic(){dynamic d;int i=20;d=i;Console.WriteLine;strings=“Examplestring.”;d=s;Console.WriteLine;DateTimedt=DateTime.Today;d=dt;Console.Writer;}在任何类型充当值或typeof参数的上下文中,类型都将成为构造类型的一部分。例如,可以在以下表达式中使用dynamic。

 

  • Dynamic
     在通过 dynamic 类型实现的操作中,该类型的作用是绕过编译时类型检查, 改为在运行时解析这些操作。 dynamic 类型简化了对 COM API(例如 Office Automation API)、动态 API(例如 IronPython 库)和 HTML 文档对象模型 (DOM) 的访问。
     在大多数情况下,dynamic 类型与 object 类型的行为是一样的。 但是,不会用编译器对包含 dynamic 类型表达式的操作进行解析或类型检查。 编译器将有关该操作信息打包在一起,并且该信息以后用于计算运行时操作。 在此过程中,类型 dynamic 的变量会编译到类型 object 的变量中。 因此,类型 dynamic 只在编译时存在,在运行时则不存在。
  • 代码示例
    • 在声明中,作为属性、字段、索引器、参数、返回值或类型约束的类型。 下面的类定义在几个不同的声明中使用 dynamic。
class ExampleClass
{
    static dynamic field;
    dynamic prop { get; set; }
    public dynamic exampleMethod(dynamic d)
    {
        dynamic local = "Local variable";
        int two = 2;
        if (d is int)
        {
            return local;
        }
        else
        {
            return two;
        }
    }
}
    • 在显式类型转换中,作为转换的目标类型。
static void convertToDynamic()
{
    dynamic d;
    int i = 20;
    d = (dynamic)i;
    Console.WriteLine(d);
    string s = "Example string.";
    d = (dynamic)s;
    Console.WriteLine(d);
    DateTime dt = DateTime.Today;
    d = (dynamic)dt;
    Console.WriteLine(d);
}
    • 在以类型充当值(如 is 运算符或 as 运算符右侧)或者作为 typeof 的参数成为构造类型的一部分的任何上下文中。 例如,可以在下列表达式中使用 dynamic。
int i = 8;
dynamic d;
d = i as dynamic;
Console.WriteLine(typeof(List<dynamic>));

免责声明:文章转载自《.NET 数据类型之动态类型(Dynamic)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS 7下安装go环境Web APi入门之基本操作(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

MeteoInfo-Java解析与绘图教程(一)

MeteoInfo-Java解析与绘图教程(一)已经进入开发行业很多年了,这两年一直从事气象开发行业,为此对气象绘图有了新的见解像色斑图与卫星图一直都有python去绘制,在偶然的情况下,我接触到了meteoInfo,在对其使用过程中,也可以做到用java绘制格点散点图,色斑图,等值图,卫星图,风场图所以趁这个机会我开始记录自己的探索过程,方便你我他对于绘图...

如何控制el-image预览图片的大小

Src=“scope.row.carlouseUrl”:1。从“element-ui/packages/image/src/image-viewer”2导入图像查看器importerImageViewer。寄存器组件:3。使用组件&lt;El table columnlabel=“旋转图表”width=“220px”&gt;...

利用油猴插件实现全网VIP视频免费看

利用油猴插件实现全网VIP视频免费看第一步:首先打开谷歌应用商店搜索tampermonkey安装这个插件第二步:在百度搜索框搜索油猴可以看到以下页面,点击进入。下载谷歌上网助手解压后,将后缀为crx的文件拖入即可。之后注册一个谷歌上网助手账后登录即可进入谷歌应用商店油猴插件...

Ubuntu安装时怎样分区

应该首先放置启动分区。并将引导设置为主分区。如果是双系统或多系统安装,通常可以选择逻辑分区。首先,Grub可以在1024柱面后面引导Linux内核;第二,即使有多个Linux安装,/boot也可以完全不共享。此外,非独立/引导分区仅占用根文件夹下约20MB的空间。所以决定是否启动。...

VS调试异常问题解决(一)

VisualStudio必须是"以管理员身份运行",即鼠标右键"以管理员身份运行",不是指你当前登录的账户是不是Administrator的问题。参考:VS调试时断点无法进入或命中的原因及解决方法当前不会命中断点,还没有为该文档加载任何符号参考:VS2017调试代码显示“当前无法命中断点,还没有为该文档加载任何符号”注:在mvc中视图cshtml中,如果代码...

JVM内存状况查看方法和分析工具

Java本身提供了多种丰富的方法和工具,帮助开发人员查看和分析GC和JVM内存的状态。同时,开源社区和商业社区也有一些工具来查看和分析GC和JVM内存的状态。在内存分析中,JVisualVM的最大优点是可以通过安装VisualGC插件来分析GC趋势和内存消耗细节。使用JMap查看当前JVM中每一代的内存状态、JVM中对象的内存使用情况,并导出整个JVM中的内...