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

发布时间 2023-11-22 13:17:51作者: 翔星

前言

在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开发跳槽