.net学习之.net和C#关系、运行过程、数据类型、类型转换、值类型和引用类型、数组以及方法参数等

时间:2023-12-16 13:11:02

1..net 和 C# 的关系
.net 是一个平台,C#是种语言,C#语言可以通过。net平台来编写、部署、运行。net应用程序,C#通过。net平台开发。net应用程序
2.。net平台的重要组成
FCL(framework class library) - 框架类库,即微软事先定义好的类的集合
CLR - 公共语言运行时,即创建、部署、运行。net的必备环境
3.C#源代码的运行过程
通过csc命令将C#源代码编译成exe文件,即程序集,由MSIL(微软中间语言)组成,双击运行,通过CLR公共语言运行时,由于CPU只认识二进制代码,所以JIT会将程序集的微软中间语言转换为本地平台的CPU指令(即二进制代码)并将指令发给CPU执行。
(1)不是所有的exe文件都叫程序集,只有通过csc命令编译的成的文件才叫程序集
(2).net平台是一个跨语言的平台,可以通过C#、VB等语言来开发。net应用程序
4.数据类型
(1)内存的访问速度特别快
(2)在内存里开辟空间的时候要指定空间的类型
(3)每一种数据类型在内存中开辟多大的空间是根据这个数据类型的最大值来确定的
(4)数据类型就是内存中开辟空间大小的一个模板
(5)预定义数据类型:微软事先规定好开辟空间的大小的模板。
(6)变量就是开辟的那块空间
(7)变量的类型:就是为这个空间取得的别名
(8)变量的值:就是这块空间的值
5.类型转换
Parse方法转换字符串和Convert转换字符串的区别:
Convert方法内部就是调用Parse方法转换,只不过在转换之前先判断字符串是否为null,比如转换int时为null值返回0,不会抛出异常
6.值类型和引用类型
值类型:比如数值类型 char bool 枚举 结构等,直接将数据存储在栈里的变量的空间里面
引用类型:string 数组 类,变量声明在栈里面,真实的对象存储在堆里面,栈里面的变量存储的是对象的地址

将一个变量赋值给另外一个变量:无论如何都是将变量的值拷贝一份进行赋值,不同的是引用类型的变量里存储的是地址,所以导致了传递的地址指的是同一个对象。
7.流程控制
switch只能判断等值,if else可以判断等值也可以判断范围
for(int i=0;;i++)判断条件不写,永远为true
{

}
for (; ;)死循环
{

}
8.二维数组
int[,] array = new int [2,3];//表示2行3列的二维数组
Console.WriteLine(array.Length);//数组长度为6
Console.WriteLine(array.Rank);//表示数组的维数 2
for (int i = 0; i < array.GetLength(0); i++)// array.GetLength(0) 获取数组指定维度的长度
{
for (int j = 0; j < array.GetLength(1); j++)
{
Console.WriteLine(array[i,j]);
}
}
int[, ,] array = new int[2, 3, 4];//三维数组
9.交错数组
//交错数组,交错数组的本质是一个一维数组,只不过这个一维数组的元素又是数组
int[][] array = new int[2][];//表示有两个int类型的数组int[] int[]
array[0] = new int[3];
array[0][0] = 1;
array[0][1] = 2;
array[0][2] = 3;
array[1] = new int[1];
array[1][0] = 1;
foreach (int[] item in array)
{
foreach (int i in item)
{
Console.WriteLine(i);
}
}
int[][][] array = new int[2][][];//交错数组
10.方法重载和可变参数parames
方法名称相同,方法的参数个数或者类型或者参数顺序不同并且在同一个类中就叫做方法重载
可变参数Test(parames int[] array,int i)只能放在参数最后面,因为在调用方法时可以直接进行元素传递,用逗号分隔,程序不知道逗号的真正意义是什么
11.ref和out参数
ref和out传递的都是变量的地址
ref侧重于修改,out侧重于输出值
ref在传递之前必须要有值,因为在方法中有可能会用到这个参数的值,out在传递之前可以没有值,因为在方法中必须为这个变量赋值