C#中的var究竟是强类型还是弱类型?

前言

在C#中,var关键字是用来声明变量类型的,它是C# 3.0推出的新特征,它允许编译器根据初始化表达式推断变量类型,有点跟javascript类似,而javascript中的var是弱类型。它让C#变量声明更加简洁,但也导致了一些关于C#是强类型还是弱类型的争论。

解析

在传统意义上,强类型语言要求变量在声明时必须指定类型,而弱类型语言则允许变量没有指定类型。在C#中,var关键字可以用于声明没有指定类型的变量,看着C#仿佛是弱类型语言。

然而,C#其实是强类型语言,因为编译器会在编译期间对变量类型进行检查。如果变量初始化表达式类型不匹配,编译器将会报错。因此,C#中的var关键字不是js的任意类型,而是允许编译器根据初始化表达式推断变量类型。

案例

我们可以通过反编译var的中间语言来看到底是什么样的类型。大家看看下面的案例。

1、 首先建一个新的.NET 6控制台项目。在分别建4个不同类型的var变量。生成一下并运行是否正常。最后用反编译软件ILspy查看刚才生成的dll文件。如下图

2、打开dll文件依次找到Program中的mian函数。我们可以看到,var消失了,说明它们已经在编译时推断出变量类型。

3、我们切换成IL中间语言,结果也未发现var关键字。从反编译的结果来说,var它属于强类型,通过编译推断出初始化的变量类型。

那么作为静态语言的C#为啥会引入var呢?

这还得从LINQ,linq可以在各种IEnumerable类型上做筛选、变换等类似SQL的操作,这样就简化了强类型的操作复杂度,不同的操作返回的类型有的比较复杂,如果每次都写出类型代码就显得比较繁琐,这种情况下就推出了var关键字语法糖。

结语

本文讲述了var是强类型还是弱类型,并用案例证明了var是强类型。大家觉得var是强类型还是弱类型呢?欢迎留言讨论。

1、面试官:C#的var和dynamic关键字,你能说清楚吗?

2、C# 作为一种静态类型语言,为什么会引入var?

来源公众号:DotNet开发跳槽

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法设计与分析复习--分支界限法

文章目录 上一篇分支界限法性质装载问题0-1背包问题单源最短路问题最大团问题下一篇 上一篇 算法设计与分析复习–回溯法(二) 分支界限法性质 分支界限法是按广度优先策略或最小耗费优先遍历问题的解空间树。 搜索解空间: 子集树排列树 …

APP自动化之Poco框架

今天给大家介绍一款自动化测试框架Poco,其脚本写法非常简洁、高效,其元素定位器效率更快,其本质基于python的第三方库,调试起来也会非常方便,能够很好的提升自动化测试效率,节省时间。 (一)背景…

如何实现数据通过表格批量导入数据库

文章目录 1. 准备工作2. 创建数据库表3. 编写导入脚本4. 优化和拓展4.1 批量插入的优势4.2 错误处理4.3 数据验证4.4 数据转换 5. 总结 🎉如何实现数据通过表格批量导入数据库 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客&…

初学者必读书籍——两个月速成Python

想学Python的你是不是一直被它生涩难懂的劝退?作为一个自学入门的程序员,依靠这样几本书,两个月就学会了python。不卖关子,我学的就是”python编程三剑客“系列。那么接下来就让我给你介绍介绍吧。 1.《Python编程:从入…

OSG文字-osgText3D(5)

osgText3D 三维立体文字比二维平面文字显示效果更好,相对二维平面文字,它有非常好的立体显示效果。 在实际虚拟现实项目中,过多使用三维立体文字会降低染效率,加重渲染负担,相对平面二维文字,它占用的内存是…

掌握Katalon Studio 导入 swagger 接口文档,接口测试效率提升100%

katalon studio大家都已经不陌生了,是一款现在非常主流的自动化测试工具,包括了web、api、APP,甚至PC应用程序都可以使用它来完成自动化测试。 swagger是一款RESTFUL接口的文档在线自动生成软件,swagger是一个规范和完整的框架&a…

Python通过selenium调用IE11浏览器报错解决方法

前提 正常安装Python 工具,selenium 包可以正常导入。IE浏览器驱动 IEDriverServer.exe 已经正确放置到已经添加path目录的文件下。 报错现象: 解决方法 打开浏览器进入 internet 选项 切换到安全页签 ,去除“应用保护模式” 再次调用验证…

C语言——I /深入理解指针(一)

一、内存和地址 1byte(字节) 8bit(比特位) 1KB 1024byte 1MB 1024KB 1GB 1024MB 1TB 1024GB 1PB 1024TB一个比特位可以存放二进制的0/1的一位 ⽣活中我们把⻔牌号也叫地址,在计算机中我们把内存单元的编号也称为…

真菌基因组研究高分策略(一):比较基因组揭示真菌菌丝和多细胞的起源

真菌是陆地和水生生态系统的重要组分,在有机质循环和跨营养级养分流通等过程中发挥着重要作用。随着测序技术的发展,高通量测序揭示了真菌群落巨大的系统发育和功能多样性,高质量真菌基因组的组装已经成为研究菌丝和潜在基因的进化起源的有力…

【c++】——类和对象(下) 万字解答疑惑

作者:chlorine 专栏:c专栏 目录 🚩再谈构造函数 🎓构造函数体赋值 🎓初始化列表 🚩explicit关键字 🚩static成员 🎓概念 面试题:计算创建多少个类对象 🎓特性 【问题】(非)…

智能合约安全漏洞与解决方案

// SPDX-License-Identifier: MIT pragma solidity ^0.7.0;import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.3/contracts/math/SafeMath.sol";/*智能合约安全在智能合约中安全问题是一个头等大事,因为智能合约不像其他语…

RH850 G3KH异常处理简述

目录 1.概述 2.异常处理后现场恢复 3.异常处理地址识别 4.小结 1.概述 我们首先来看,G3KH的关键寄存器,PSW PSW--Program status word PSW寄存器里有表征程序状态的flag,CPU操作状态的flag。如下 UM---是否是user mode;0--…

【JavaEE】Spring更简单的存储和获取对象(类注解、方法注解、属性注入、Setter注入、构造方法注入)

一、存储Bean对象 在这篇文章中我介绍了Spring最简单的创建和使用:Spring的创建和使用 其中存储Bean对象是这样的: 1.1 配置扫描路径 想要成功把对象存到Spring中,我们需要配置对象的扫描包路径 这样的话,就只有被配置了的包…

DDD神药:去哪儿结合DDD,实现架构大调优

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的DDD落地经验? 谈谈你对DDD的理解&#x…

那仰望的人

心底的孤独和叹息

LangChain库简介

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

维护工程师面经

文章目录 前言技能要求数据结构定义分类常用的数据结构 数据库原理数据的三级模式结构事务查询方式视图数据库范式 Java相关知识点总结 前言 本博客仅做学习笔记,如有侵权,联系后即刻更改 科普: 参考网址 技能要求 数据结构 参考网址 定…

毕业设计2349基于jsp的网上订餐系统【程序源码+文档+调试运行】

摘要 本文介绍了一个网上订餐系统的设计与实现。该系统分为前台用户模块和后台管理员模块,具有用户注册/登录、网站公告、菜品中心、购物车、用户后台、留言板等功能。管理员可以对用户信息、网站公告、菜品类别、菜品信息、订单信息、菜品评价信息、留言板信息和支…

Mac | Vmware Fusion | 分辨率自动还原问题解决

1. 问题 Mac的Vmware Fusion在使用Windows10虚拟机时,默认显示器配置如下: 开机进入系统并变更默认分辨率后,只要被 ⌘Tab 切换分辨率就会还原到默认,非常影响体验。 2. 解决方式 调整 设置 -> 显示器 -> 虚拟机分辨率…

Centos7安装Cesi(Supervisor集中管理工具)

Background CeSi 是 Supervisor 官方推荐的集中化管理 Supervisor 实例的 Web UI,该工具是用 Python 编写,基于 Flask Web 框架 。Superviosr 自带的 Web UI 不支持跨机器管理Supervisor 进程,功能比较简单,通过 CeSi 可以集中管理…