总结C#学习中的一些基础知识
创始人
2025-06-01 09:50:09
0

1 枚举

    enum E_MonsterType//定义了一个枚举的变量类型{normal1,//0boss = 5,//5normal2,//6,前一个自动加1}//枚举和switch语句天生一对,写switch时能对枚举类型自动补全E_MonsterType monsterType = E_MonsterType.boss;/声明枚举变量switch (monsterType){case E_MonsterType.normal1:Console.WriteLine("普通怪物逻辑");break;case E_MonsterType.boss:Console.WriteLine("boss怪物逻辑");break;default:break;}

2 数组

2.1 数组

    int[] arr1;//声明数组但没有初始化int[] arr2 = new int[5];//初始化,不设置初始值则默认为0int[] arr3 = new int[5] {1,2,3,4,5};//初始化并赋值,设置的长度是多少,则初始一定要赋多少值int[] arr4 = new int[] {1,2};//数组长度看大括号里面有几个就是几个int[] arr5 = {1,2,3,4,5,6,7};int[] arr6 = new int[8];bool[] arr7 = new bool[] { true, false };Console.WriteLine(arr5.Length);//数组变量名.Length获取数组长度foreach(int i in arr5){Console.WriteLine(i);}//数组定义之后,是没办法直接添加新的元素,只能通过声明新的数组再复制过去for(int i = 0; i < arr5.Length; i++){arr6[i] = arr5[i];}arr6[7] = 8;

2.2 二维数组

    int[,] arr;int[,] arr2 = new int[3,3];//初始化一个三行三列全0的二维数组int[,] arr3 = new int[3, 3] { { 1, 2, 3 }, { 4, 5, 6 },{ 7, 8, 9 } };//初始化并定义三行三列的数组int[,] arr4 = new int[, ] { { 1, 2, 3 },{ 4, 5, 6 },{ 7, 8, 9 } };int[,] arr5 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };Console.WriteLine(arr5.GetLength(0));//获取二维数组的行数Console.WriteLine(arr5.GetLength(1));//获取二维数组的列数//foreach也可以按行优先原则输出二维数组元素foreach(int i in arr5){Console.WriteLine("{0}",i);}

2.3 交错数组

    int[][] arr1 = new int[3][] { new int[] { 1, 2, 3 }, new int[] { 4, 5 }, new int[] { 6 } };//每行的列数可以不同Console.WriteLine($"数组的行数为:{arr1.GetLength(0)}");Console.WriteLine($"数组某一行的列数为:{arr1[0].Length}");foreach (int[] a in arr1)//交错数组的元素是数组{foreach(int b in a){Console.WriteLine(b);}}

3 值类型和引用类型

引用类型:string,数组,类

值类型:其它的,结构体

//无符号整型byte b1 = 1;ushort us = 1;uint ui = 1;ulong ul = 1;
//有符号整型sbyte sb = 1;short s = 1;int i = 1;long l = 1;
//浮点型float f = 1f;double d = 1.1;decimal de = 1.1m;
//特殊类型bool bo = true;char c = 'a';string str = "strs";
//复杂数据类型
//enum 枚举
//数组 (一维,二维,交错)
//类
//结构体

值类型和引用类型区别

值类型 在相互赋值时 把内容复制给对方 它变我不变

引用类型在相互赋值时 让两者指向同一个值 它变我也变

    //1、使用上的区别//值类型int a = 10;//引用类型int[] arr = { 1, 2, 3, 4, 5, 6, };int b = a;int[] arr2 = arr;Console.WriteLine($"a={a},b={b}");Console.WriteLine($"arr[0]={arr[0]},arr2[0]={arr2[0]}");b = 20;arr2[0] = 0;Console.WriteLine("修改后:");Console.WriteLine($"a={a},b={b}");Console.WriteLine($"arr[0]={arr[0]},arr2[0]={arr2[0]}");//值类型  在相互赋值时 把内容复制给对方 它变我不变//引用类型在相互赋值时 让两者指向同一个值 它变我也变//2、原因//它们在内存的存储方式是不同的//值类型存储在 栈空间,由系统分配,自动回收,小而快//引用类型存储在 堆空间,手动申请和释放,大而慢//new了新的内存空间,就和arr没关系了arr2 = new int[] {99,1,2,3};Console.WriteLine($"arr[0]={arr[0]},arr2[0]={arr2[0]}");

string的它变我不变

    //string的它变我不变string str1 = "123";string str2 = str1;//string特殊的地方在于重新赋值时会在堆中重新分配空间,因此它变我不变//在频繁对string重新赋值时,会产生内存垃圾str2 = "321";

4 函数

4.1 函数语法

    //无参无返回值static void SayHello(){Console.WriteLine("你好!");}//有参无返回值static void SayYourName(string name){Console.WriteLine($"你的名字是:{name}");}//无参有返回值static string YourName(){return "tyy";}//有参有返回值static int Sum(int a, int b) => a + b;//一行代码的可以用=>表示返回值//有参有多返回值(用数组)static int[] SumAverage(int a, int b){int sum = a + b;int avg = sum / 2;//int[] arr = { sum, avg };return new int[] {sum,avg};//一步返回数组需要new}SayHello();SayYourName("tyy");SayYourName(YourName());//一个函数的返回值作为另一个函数的参数传入Console.WriteLine(Sum(1,2));int[] arr = SumAverage(7, 9);//也用数组接收函数的数组返回值Console.WriteLine($"{ arr[0]}, {arr[1]}");

4.2 ref 和 out

作用:可以解决在函数内部改变外部传入的参数,函数里面改变外面也会改变

    //普通函数static void ChangeValue(int value){value = 3;}static void ChangeArray(int[] arr){arr = new int[] { 10, 20, 30 };//重新声明数组,外面没有改变}static void ChangeArrayValue(int[] arr){arr[0] = 99;}//参数加refstatic void ChangeValueRef(ref int value)//定义参数前面加上ref{value = 3;}static void ChangeArrayRef(ref int[] arr){arr = new int[] { 10, 20, 30 };}//参数加outstatic void ChangeValueOut(out int value)//定义参数前面加上out{value = 33;}static void ChangeArrayOut(out int[] arr){arr = new int[] { 100, 20, 30 };}int a = 1;ChangeValue(a);//a的值没有改变,因为int是值类型ChangeValueRef(ref a);//传入参数前也要加上ref或out,修改成功ChangeValueOut(out a);int[] arr1 = {1, 2, 3 };ChangeArray(arr1);//函数内重新声明数组,原数组元素值未改变ChangeArrayValue(arr1);//a[0]改变了ChangeArrayRef(ref arr1);//一起改变了ChangeArrayOut(out arr1);

4.3 变长参数 params 和参数默认值

4.3.1 变长参数

params int[]意味着可以传入任意n个参数,n可以为0,传入的参数存在arr数组中

  • params 关键字后面一定是数组

  • 数组可以是任意类型

  • 函数的参数可以是 其他类型的参数和 params 修饰的参数

  • 最多只能有一个 params 关键字,且一定放在最后一组参数

static int Sum(params int[] arr)
{int sum = 0;for(int i = 0; i < arr.Length; i++){sum += arr[i];}return sum;
}Sum();
Sum(1, 2, 3, 4, 1, 2, 4, 12, 5, 235, 5, 23, 1, 4, 1);//任意长的参数个数都可以

4.3.2 参数默认值

当函数调用时如果不传入参数,则使用默认值作为参数传入

每个参数都可以有默认值,有默认值的参数必须写在普通参数的后面

static void Speak(string str = "没什么说的")
{Console.WriteLine(str);
}
Speak();//使用默认参数
Speak("giao!");//使用传入参数

4.4 函数重载

在同一语句块中,函数的名字相同,但参数的数量、类型或顺序不同,与返回值无关

    static int Sum(int a, int b){return a + b;}static int Sum(int a, int b, int c)//参数数量不同{return a + b + c;}static float Sum(int a, float b)//参数类型不同{return a + b;}static float Sum(float a, int b)//参数顺序不同{return a + b;}static int Sum(ref int a, int b)//ref和out也算重载,但一个重载的话另一个就不能重载了,两个中只取一{return a + b;}static int Sum(out int a, int b)//ref和out也算重载,但一个重载的话另一个就不能重载了{a = 1;b = 2;return a + b;}static float Sum(int a, int b, params int[] arr)//变长参数重载{return 1;}

5 结构体

struct Student
{//public和private修饰结构体中的变量和函数,表示能否被外部使用//默认(啥都不写)为private//变量public int age;public bool sex;public int number;public string name;//函数方法 表现这个结构体的行为,不需要加static关键字public void Speak(){//函数中可以直接使用结构体声明的变量Console.WriteLine($"我的名字是{name},今年{age}岁");}//构造函数 用于在外部方便结构体的初始化//没有返回值,和结构体名字相同,必须有参数,声明构造函数必须对其中所有变量初始化public Student(int age, bool sex, int number, string name){//this关键字,相同变量名字时来区分自己和参数this.age = age;//必须初始化this.sex = sex;this.number = number;this.name = name;}
}Student s1;s1.age = 10;//public才能在外部使用变量和函数s1.sex = false;s1.number = 1;s1.name = "tyy";s1.Speak();

相关内容

热门资讯

科技富豪财富暴增:马斯克身价上... 2025年人工智能投资热潮推动了美国最富有的科技富豪净资产飙升。但随着市场对人工智能泡沫担忧的增长,...
马思唯献唱NBA名人赛 尼克杨... 近日,2025成都聚星名人赛在成都五粮液体育中心举行。现场,四川籍说唱歌手马思唯担任助演嘉宾,倾情现...
一家老牌VC决定申请破产 在一级市场中,风险投资机构主动申请破产实属罕见。但近日,一家美国老牌VC却做出了这一出人意料的决定。...
300391爆雷!连续三年财务... 本报(chinatimes.net.cn)记者帅可聪 北京报道“全仓进的,这回真不知道该怎么办了。”...
6000万变1300万!圣元环... 本文来源:时代周报 作者:赵鹏 来源:图虫继郑煤机(601717.SH)投资北京华软新动力私募基金...
川蜀双城记:在火锅味与烟火气中... 出品|达摩财经如果今天依然用“安逸”“巴适”来定义四川,那你可能错过了一场正在中国西南腹地悄然发生的...
乌克兰基辅响起爆炸声 当地时间12月27日,乌克兰基辅响起爆炸声。 此前,乌克兰基辅拉响防空警报。(总台记者 王晋燕)
工信部成立人形机器人与具身智能... 红星资本局12月27日消息,据“工信微报”,12月26日,工业和信息化部人形机器人与具身智能标准化技...
2025,我们的家国记忆 即将和2025说再见,这一年见证了哪些难忘时刻?有热爱拼搏,有市井烟火,也有国安家好……这是每一个你...
机构报告:美国肥胖率超35%的... 10月16日消息,非营利组织美国卫生基金会发布报告显示,2024年美国有19个州成年人肥胖率超过35...