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

这篇具有很好参考价值的文章主要介绍了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文件。如下图

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

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

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

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

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

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

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

结语

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

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

2、C# 作为一种静态类型语言,为什么会引入var?文章来源地址https://www.toymoban.com/news/detail-747116.html

来源公众号:DotNet开发跳槽

到了这里,关于C#中的var究竟是强类型还是弱类型?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 使用SIMD向量类型加速浮点数组求和运算(4):用引用代替指针, 摆脱unsafe关键字,兼谈Unsafe类的使用

    作者: zyl910 目录 一、引言 二、办法说明 2.1 历史 2.2 局部引用变量与引用所指的值(类似指针的 地址运算符 、间接运算符 * ) 2.3 重新分配局部引用变量(类似指针直接赋值) 2.4 引用地址调整(类似指针加减法) 2.5 引用地址比较(类似指针比较) 2.6 重新解释(类似C++的

    2024年02月15日
    浏览(42)
  • ES6中let和const关键字与var关键字之间的区别?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月09日
    浏览(48)
  • JS中var、let以及const关键字到底怎么用?

    在学习JS变量之后,初学者都避免不了都会一下子分不清这三个变量在代码块中的作用域范围,其实 const 简单理解它就是定义常量的,但是在实际开发中,我们却很常见它的身影。 说实话刚开始我也分不清他们的作用域范围,但是自己再去详细看一遍教程之后,其实发现还是

    2023年04月13日
    浏览(41)
  • 【C语言趣味教程】(5) 常量:字面常量 | 类型常量 | const 关键字 | const 的声明 | 程序中的只读概念 | const 保护机制 | 如何巧妙区分 “指针常量“ 和 “常量指针“

        🔗 《C语言趣味教程》👈 猛戳订阅!!! ✨ 专栏介绍 / 总目录: 【C语言趣味教程】(0) 导航篇 ​ —— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面: 这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人

    2024年02月15日
    浏览(44)
  • C# -- static 关键字

    一、static static ,用于修饰类,字段,属性,方法,构造方法等。被 static 修饰的类称之为“静态类”; 被 static 修饰的成员称之为“静态成员”,被修饰过的成员分别称为:静态字段,静态属性,静态方法,静态构造方法。 二、静态字段 1.概念 被 static

    2023年04月19日
    浏览(36)
  • C# void 关键字学习

    C#中void是System.Void的别名; 可以将 void 用作方法(或本地函数)的返回类型来指定该方法不返回值; 如果C#方法中没有参数,则不能将void用作参数;这是与C语言不同的,C语言有 int func(void) 这样的; 做一个winform示例看一下;

    2024年02月10日
    浏览(37)
  • C# const关键字学习

    你居然不知道const?今天在做项目的时候别人问我的,我确实不知道这个,今天我们就来一起学习一下const定义局部变量,这个对于常数变量非常的友好的,可以提高程序的运行效率,因为它是在编译时的操作,所以我们必须要学习一下,这不就是提

    2024年01月22日
    浏览(50)
  • C#中out关键字

    在C#中可以使用out,指定所给的参数是一个输出参数。out的使用方式与ref相同,都是在函数定义和函数调用中用作参数的修饰符。 运行结果,如下图所示: 实际上,out的执行方式与引用参数几乎完全一样,因为在函数执行完毕后,该参数的值将返回给函数

    2024年02月05日
    浏览(51)
  • instanceof、对象类型转化、static关键字

    instanceof是判断一个对象是否与一个类有关系的   先看引用类型,再看实际类型 * 例子:obj instanceof A 先看obj的类型是否与A有关联,无关联则报错,有关联则判断obj的实际类型 因为obj的实际类型是son,所以String类与他无关,所以返回false 对象类型转换: 发生在父子之间

    2024年02月02日
    浏览(40)
  • 正确理解c# default关键字

    最近QA测试一个我开发的一个Web API时,我意识到之前对C#的 default 的理解一直是 想当然 的。具体情况是这样,这个API在某些条件下要返回模型的默认值,写法类似于下面这样 实际上,这个API会返回 204 No Content ,而不是想象中的一个空的WeatherForecast。API返回204,说明 default 得

    2024年01月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包