【小雨学编程之C#】18.1 数据类型转换,数据类型别名

【小雨学编程之C#】18.1 数据类型转换,数据类型别名
文章图片
细心的小伙伴会发现 , 在我们编写代码的过程中 , 当我们声明一个整形变量输入int的时候 , 会看到:
【小雨学编程之C#】18.1 数据类型转换,数据类型别名
文章图片
这个位置是代码提示 , 不过……咦~这里的int16、int32是啥?也是数据类型吗 , 为啥没学过 。
我们的C#是区分代码大小写的 , 但是有时候有些小伙伴会发现 , 在声明字符串类型的时候 , 既可以使用string也可以使用String , 这两种声明方式有区别码?
【小雨学编程之C#】18.1 数据类型转换,数据类型别名
文章图片
之前在介绍HelloWorld这个控制台应用程序的时候提到过 , 我们使用的Console是别人写的代码 , 由于这样的代码存储在System这个命名空间中 , 所以我们写代码的时候 , 要在开头填上usingSystem , 用以在我们代码运行之前先将我们要引用的代码提前加载在程序中 , 以供应我们随时调用 。
但是类似Console.WriteLine()这样的代码是指令 , 它做了很多动作 , 比如开启黑色对话框 , 并将对应内容显示出来 , 这一连串动作也对应着代码 , 只是这样的代码不是用C#写的 , 它属于.NET类库中的内容 。
就是说 , 我们使用Console.WriteLine()的时候 , 是用C#代码调用.NET类库 , 这Console.WriteLine()不属于C#!!!
我们知道 , 我们学习的C#是运行在.NET(dotnet)之上的 , 这个.NET由三部分组成:
CLR:CommonLanguageRuntime执行环境(包括内存管理、代码执行、异常处理等)
编程工具:涵盖了编码和调试需要的一切:包含:VisualStudio集成开发环境、.NET兼容的编译器如:C#、VB、JScript和托管的C++等
BCL:BaseClassLibrary , 基类库 , 可提供给.NET所有语言使用 , 这里划重点是“提供给.NET所有语言使用”的哦!
那么也就是说 , 在我们使用Console.WriteLine()是在调用公共类库的内容 。 这也就相当于 , 我们可以使用各种型号 , 各种屏幕 , 各种大小的电视机 , 但是所看的电视剧都是通过电视台发出的信号 , 而并不属于某个电视 。
我们C#编写出的代码是不能直接执行的 , 需要编译成中间代码 , 然后通过CLR来运行 。
那么也就是说 , 我们的HelloWorld这个程序是用C#和公共类库混写的 , 编译的时候 , 是将C#代码和公共类库代码一起编译成了中间代码 。
那么这个又和我们所说的数据类型有什么关系呢?让我们简单做个实验 , 我们将代码第一段的usingSystem去掉 , 然后再输入Int看代码提示有啥变化没:
【小雨学编程之C#】18.1 数据类型转换,数据类型别名
文章图片
这时候我们发现 , 当去掉usingSystem的时候 , 之前代码提示中的Int16、int32都不见了 。
【小雨学编程之C#】18.1 数据类型转换,数据类型别名
文章图片
而且大写S开头的String也报错了 。
这就说明我们看到的这些Int16、int32、String等都属于System 。
在usingSystem存在的时候 , 我们写的:
Int32a;
Stringstr;
都是在调用公共类库来声明变量 。
那么我们的C#也可以声明变量 , 公共类库也可以声明变量 , 这不是重复了嘛?
在这里直接给大家结论 , 其实我们使用的int、double、string都是C#在.NET公共类库中的别名:
int是System.Int32的别名
double是System.Double的别名
string是System.String的别名
之所以我们可以直接使用Int32、String的原因是在代码的开头我们引入了对应的命名空间 。
我们在写C#代码的时候 , 是可以直接调用.NET公共类库中的内容的 , 只是.NET公共类库代码太长了 , 用C#中的别名代替 。