首页 > 编程语言 >c#动态类型

c#动态类型

时间:2024-06-04 16:13:14浏览次数:15  
标签:动态数据 c# 成员 dynamic 关键字 类型 动态

原文链接:https://www.cnblogs.com/qqvvn/p/9932812.html

一、动态类型其实是动态编译的一种形式。在.net4.0上添加新的动态类型dynamic,对于动态类型,就是在运行时才会确定的类型。

1.dynamic关键字的使用

1)使用var可以定义本地变量,该变量的实际数据类型取决于编译时,是在初次分配时确定的,在初次分配后,将拥有一个强类型的变量,任何不相容的的赋值操作都会导致编译错误:

static void Main(string[] args)
{
var a = new List<int>();
a.Add(90);
a = "hello";
}
2)随着4.0的发布,c#引入一个关键字dynamic,我们可以把任何值设置为动态的数据类型,因此可以认为dynamic是一种特殊的System.Object,因此我们现在有三种定义数据的方式,但动态数据不是静态类型,对于dynamic声明的数据可以分配任何初始值,并且可以在生命周期中重新分配新的值。

2.调用动态声明数据的成员

在动态数据后加个.,然后指定公共成员,但是编译器不会检查成员的有效性,直到运行时才会检查成员调用、参数等的有效性。如下代码:

static void Main(string[] args)
{
       dynamic a = "hello";
       Console.WriteLine(a.ToUpper());
       Console.WriteLine(a.toupper());
       Console.WriteLine(a.Foo(10,DateTime.Now));
}
除此之外,调用动态数据的成员时VS不会获取智能提示,而强类型可以。

3.MicroSoft.CSharp.dll的作用

在VS创建新的项目的时候,将自动引入MicroSoft.CSharp.dll程序集,这个程序集包含MicroSoft.CSharp.RuntimeBinder命名空间和两个类:RuntimeBinderException和RuntimeBinderInternalCompilerException,如果试图调用一个不存在的动态数据的成员或者调用了一个存在的成员且错误的参数数据时,将会抛出RuntimeBinderException。

由于动态数据的不确定性,可以在调用成员时通过try catch来进行包裹。

4.dynamic关键字的作用域

用var声明的数据只能作为一个成员范围内的本地变量,不能用于返回值、参数和类成员, 但对于dynamic来说可以实现。

5.dynamic关键字的限制

在调用一个动态数据的方法时,不能使用Lambda表达式和c#匿名方法。另外一个是,dynamic声明的数据不能用于Linq技术。

6.dynamic关键字的实际用途

在某些场景中,dynamic关键字可以减少手工输入的代码量,特别是一个大量使用后期绑定(通过反射)的.net应用程序,使用dynamic关键字是在用类型的安全换取代码的简洁度,动态类型并不是必须的,需要根据具体的场景来决定是否使用动态行为。

二、DLR

DLR(动态语言运行时)随着.net 4.0一起发布,作为CLR的补充运行时环境,DLR的作用之一是使不同的动态语言能在.net运行时运行,最常用的是IronPython和IronRuby。

标签:动态数据,c#,成员,dynamic,关键字,类型,动态
From: https://www.cnblogs.com/Dongmy/p/18231018

相关文章

  • 《Fundamentals of Power Electronics》——保角映射
    ......
  • C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
    intcountBits(intn){intcount=0;while(n){count+=n&1;//count=count+n&1//n&1的结果只可能是1或者0//如果对应的二进制位上的数字不同,那么n&1的结果就是1,//那么count刚好加一n>>=1;......
  • 全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯
     资料下载地址:全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯这是旧版退役拆解了新版 与电路图所示共设置4个按键短按开关台灯加减键调光长按进入菜单1.台灯加入PCAPWM调光STC12C5A60S2的PCAPWM非常好用设置简单无极调节......
  • Facebook海外三不限 | 如何降低Facebook频繁被封的风险
    本文将讨论Facebook账户被封的原因及降低封禁风险的方法,以维护用户的账户安全和社交乐趣。1.常见原因:账户被封通常与发布违反社区标准的内容有关,如仇恨言论、暴力内容、欺诈虚假信息、非法活动、骚扰、版权侵权等。此外,未授权访问、频繁自动化操作、异常行为也可能导致账户......
  • Pod安全策略:PodSecurityPolicy(PSP)
    目录一.系统环境二.前言三.PodSecurityPolicy简介四.为什么需要PodSecurityPolicy五.给客户端授权六.启用PodSecurityPolicy(PSP)七.PSP规则之禁止创建特权用户pod八.PSP规则之数据卷8.1限定数据卷使用某一个目录8.2限定数据卷的类型为emptyDir九.PSP规则之指定使用宿主机网络十......
  • Spring Boot自动装配bean到IOC容器的实现
    前言SpringBoot能帮助我们Java开发者快速开发基于Spring框架的应用,除了其作为依赖管理好帮手的一众Spring-Boot-Starter之外,其自动装配(AutoConfigure)特性也起到了非常重要的作用。那么SpringBoot是如何实现自动装配的呢?本文将结合源码去讲解其原理。版本信息spring-boot-......
  • 轻松拿捏C语言——【内存函数】
    ......
  • ChatGPT的平替产品—GPTBiz国内网络直接使用
    不仅仅是一个产品,GPTBiz是一个为国内用户量身定制的大语言模型应用平台。随着人工智能技术的迅猛发展,市场对能够快速、高效接入这些技术的需求日益增长。GPTBiz通过本土化服务器部署,为用户提供极速的体验和合规的安全保障,解决了跨境支付风险的问题。关于GPTBizGPTBiz的特......
  • :empty 选择器在 css 中不起作用
    我在.error类中使用了:empty选择器。问题是,即使在带有error类的div中没有内容,error类也不会被完全删除。当我在firebug中进行测试时,我发现div中仍有一些空白,而当我删除这些额外的空格时,div就会消失。.error{border:solid1px#ff0000;color:#ff......
  • MAUI:Compatibility.Layout<T> 不显示任何内容
    我在Xamarin->MAUI转换中苦苦挣扎,并被Compatibility.Layout<T>中的问题所困扰,它无法显示任何内容。我希望看到一个标签(相同的代码可在Xamarin表单中使用)。下面是Maui和Xamarin的代码和截图。我遗漏了什么?以下是我的MAUI代码(无法正常......