思考并回答以下问题:
- .Net的本质是个软件怎么理解?
- 电脑上的.Net Framework是怎么来的?安装在什么位置?
- Mono是什么?
- Unity是基于.Net什么版本的?
- .sln和.csproj分别是什么意思?
- C#的数组存在什么问题?是如何解决的?
C#是为Unity服务的,C#学的再好Unity学不好没多大意义。
C#基础
.Net的本质其实是一个运行在操作系统上的软件。一般所说的.Net指的是.Net Framework框架。
安装路径:C:\Windows\Microsoft.NET
mono是一个开源跨平台的.net运行环境。Mono也是一个软件。
https://download.mono-project.com/archive/5.20.1/windows-installer/mono-5.20.1.19-x64-0.msi
C#通过.Net平台开发的应用程序,能不能运行在某个计算机上面,取决于该计算机是否安装了对应版本的.Net Framework框架。
基于.Net Framework3.0开发的程序如果只使用了.Net Framework2.0的功能,也可以运行在.Net Framework2.0环境下。
Unity是基于.Net Framework3.5的。
VS
解决方案和项目
一个解决方案可以有多个项目
启动项目是粗体,可以右键“设为启动项目”,运行的时候就执行此项目。
解决方案(.sln)文件其实是一个文本文件,这个文件记录着解决方案管理的项目(项目名称与路径)。
项目文件(.csproj),也是一个文本文件,这个记录了项目里面的资源。
注意:在VS里面,项目移除可以重新加载,项目里的资源被移除则是永久删除。
快捷注释
注释:先CTRL+K,然后CTRL+C。
取消注释: 先CTRL+K,然后CTRL+U。
.Net编译原理
Main函数是程序的入口,也是程序的出口。
Net平台的重要组成部分
一、 重要组成部分:
1、FCL: 框架类库
我们在编程的时候,经常会用到一些功能,微软事先把这些功能写好(比如像控制台输出信息(例如Console.WriteLine()),产生一个随机数),封装在一个一个的类里面,然后把这些类放在.Net平台中,这些类的集合,我们就叫做框架类库(可以看做是功能的集合)。我们可以用各自的语法来调用
2、CLR:公共语言运行时
它是.Net程序运行的必备环境
如果.Net程序要在系统上运行,那么系统上面必须安装CLR
注意:CLR是无法单独安装的,它集成在.Net框架里面,将.Net框架安装在系统上,系统里面就有了CLR和FCL
二、如何获取.Net程序的可运行文件
这个文件能不能在电脑上运行,取决于电脑是否安装了对应的.Net框架
Net程序的编译原理
1、C#源代码通过C#编译器,编译成程序集,程序集里面包含微软中间语言(MSIL)
2、运行程序集的时候,CLR中的即时编译器(JIT,Just In Time)会将微软中间语言转换为本地平台对应的二进制指令,然后交给CPU去运行
C#编译器也是由.Net框架提供的。
CLR在运行时管理程序的执行,包括以下内容:
- 内存管理和垃圾收集(C和C++是自己操作内存,内存泄漏时,需要自己检查内存泄漏,但C#通过CLR完成)
- 代码安全验证
- 代码执行、线程管理及异常处理
托管代码和非托管代码
从 .NET Framework 4 开始,所有 .NET Framework 版本都是就地更新的,因此,在系统中只能存在一个 4.x 版本。 此外,某些版本的 Windows 操作系统上预装了特定版本的 .NET Framework。 这表示:
如果在计算机上已安装了更高的 4.x 版本,则无法安装以前的 4.x 版本。
如果操作系统预安装了特定的 .NET Framework 版本,则无法在同一计算机上安装以前的 4.x 版本。
如果你安装更高版本,则无需先卸载以前的版本。
.NET Framework 是软件开发平台(框架),C#是.NET框架中支持的其中一种语言。
C#语言的运行载体是.NET框架。
C#源文件要经过C#编译器编译成托管程序集元数据,就是exe程序或者dll库。
然后由.NET Framework编译器编译成机器代码,被操作系统识别。
C#是跟随.NET的开发工具Visual Studio一起发布的,在安装Visual Studio时是把.NET Framework框架一并安装的,所以C#的版本是跟随.NET Framework的,换句话说C#语言本身没有单独版本之说,和.NET框架版本同步。
在同一台机器上可以同时存在不同版本的.NET Framework,互不干扰,正常运作。
微软产品的特性:高版本兼容低版本,向下兼容。
c# 跟.net Framework不是一个概念。另外我们通常说的版本都是指.net framework的版本。
不过c#语言本身也有版本之分。
像PHP一样,PHP7比5是语法上有提升,然后解释器不一样。C#的版本是和VS绑定的。VS就是个解释器,也会识别新语法。
C# 7.0
2017 年 3 月
随 Visual Studio 2017 和 .NET Framework 4.7 发布
C# 6.0
2015 年 7 月
随 Visual Studio 2015 和 .NET Framework 4.6 发布
C# 5.0
2012 年 8 月
随 Visual Studio 2012 和 .NET Framework 4.5 发布
C# 4.0
2010 年 4 月
随 Visual Studio 2010 和 .NET Framework 4.0 发布
C# 3.0
2007 年 11 月
随 Visual Studio 2008 和 .NET Framework 3.5 发布
语法
int a = 100;
a++和++a对于a来说都是一样的值,都是101
int b = a++ 和 int b = ++a对于b是不一样的。前者是先返回再加,后者是先加后返回。所以b分别是100和101
byte范围为0-255
short范围为-32768-32767
byte类型相加,结果为int
short类型相加,结果为int
int=byte+byte
int=short+short
int=short+byte
byte与short相互参与运算,运算的结果为int类型。
为什么?因为byte和short的存储范围比较小,byte与short相互参与运算的时候经常超出范围,所以微软规定,结果都为int类型。
关于范围:
整型的数据范围比较:long>int>short>byte
浮点类型的范围一定比整型大
浮点型的数据范围比较:double>float>decimal
(精度与范围无关,精度比较decimal>double>float )
3、string类型无法参与算术运算,只能进行字符串拼接
4、参与算术表达式的类型只能是数值类型和char类型
5、char类型参与运算的时候,会转换成ASCII码(在线转换的链接: https://www.qqxiuzi.cn/bianma/ascii.htm)
6、decimal不能与其他浮点类型的变量进行运算,因为会丢失精度
int是个类型,像new Class1一样
int[] arr1 = new int[8];
int[] arr2 = new int[] { 1, 2, 3 };
int[] arr3 = { 5, 6, 7, 8, 9 };
数组的三种写法,遇到这种写法多的时候就确定用一或两种。第三种是对第二种的简化,所以就使用1,3就行。看第一种new int,就知道int是个类。然后和Class1,Delegate一样的。
C#数组存在的问题是长度固定。
硬件
硬盘的读写效率取决于磁盘的转速。
买硬盘的衡量标准在于容量和转速。
为什么内存比硬盘快?
内存的数据存储在电子元件里面,直接读取与写入,效率比硬盘高。
为什么系统装在C盘?
垃圾收集
1 | using System; |
委托
委托作为一个方法的参数时,给这个方法传参时隐藏了委托赋值的过程。这个传参可以使用Lambda表达式。
此时如果需要使用多播委托,则需要连续调用这个方法。
举例如下:
1 |