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
结语
本文讲述了var是强类型还是弱类型,并用案例证明了var是强类型。大家觉得var是强类型还是弱类型呢?欢迎留言讨论。
1、面试官:C#的var和dynamic关键字,你能说清楚吗?
来源公众号:DotNet开发跳槽