翼度科技»论坛 编程开发 .net 查看内容

C#基础

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
1 枚举
  1.     enum E_MonsterType//定义了一个枚举的变量类型
  2.         {
  3.             normal1,//0
  4.             boss = 5,//5
  5.             normal2,//6,前一个自动加1
  6.         }
  7.     //枚举和switch语句天生一对,写switch时能对枚举类型自动补全
  8.     E_MonsterType monsterType = E_MonsterType.boss;/声明枚举变量
  9.         switch (monsterType)
  10.         {
  11.             case E_MonsterType.normal1:
  12.                 Console.WriteLine("普通怪物逻辑");
  13.                 break;
  14.             case E_MonsterType.boss:
  15.                 Console.WriteLine("boss怪物逻辑");
  16.                 break;
  17.             default:
  18.                 break;
  19.         }
复制代码
2 数组

2.1 数组
  1.     int[] arr1;//声明数组但没有初始化
  2.     int[] arr2 = new int[5];//初始化,不设置初始值则默认为0
  3.     int[] arr3 = new int[5] {1,2,3,4,5};//初始化并赋值,设置的长度是多少,则初始一定要赋多少值
  4.     int[] arr4 = new int[] {1,2};//数组长度看大括号里面有几个就是几个
  5.     int[] arr5 = {1,2,3,4,5,6,7};
  6.     int[] arr6 = new int[8];
  7.     bool[] arr7 = new bool[] { true, false };
  8.     Console.WriteLine(arr5.Length);//数组变量名.Length获取数组长度
  9.     foreach(int i in arr5)
  10.     {
  11.         Console.WriteLine(i);
  12.     }
  13.     //数组定义之后,是没办法直接添加新的元素,只能通过声明新的数组再复制过去
  14.     for(int i = 0; i < arr5.Length; i++)
  15.     {
  16.         arr6[i] = arr5[i];
  17.     }
  18.     arr6[7] = 8;
复制代码
2.2 二维数组
  1.     int[,] arr;
  2.     int[,] arr2 = new int[3,3];//初始化一个三行三列全0的二维数组
  3.     int[,] arr3 = new int[3, 3] { { 1, 2, 3 },
  4.                                   { 4, 5, 6 },
  5.                                   { 7, 8, 9 } };//初始化并定义三行三列的数组
  6.     int[,] arr4 = new int[, ] { { 1, 2, 3 },{ 4, 5, 6 },{ 7, 8, 9 } };
  7.     int[,] arr5 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
  8.     Console.WriteLine(arr5.GetLength(0));//获取二维数组的行数
  9.     Console.WriteLine(arr5.GetLength(1));//获取二维数组的列数
  10.     //foreach也可以按行优先原则输出二维数组元素
  11.     foreach(int i in arr5)
  12.     {
  13.         Console.WriteLine("{0}",i);
  14.     }
复制代码
2.3 交错数组
  1.     int[][] arr1 = new int[3][] { new int[] { 1, 2, 3 }, new int[] { 4, 5 }, new int[] { 6 } };//每行的列数可以不同
  2.     Console.WriteLine($"数组的行数为:{arr1.GetLength(0)}");
  3.     Console.WriteLine($"数组某一行的列数为:{arr1[0].Length}");
  4.     foreach (int[] a in arr1)//交错数组的元素是数组
  5.     {
  6.         foreach(int b in a)
  7.         {
  8.             Console.WriteLine(b);
  9.         }
  10.     }
复制代码
3 值类型和引用类型

引用类型:string,数组,类
值类型:其它的,结构体
  1. //无符号整型
  2.     byte b1 = 1;
  3.     ushort us = 1;
  4.     uint ui = 1;
  5.     ulong ul = 1;
  6. //有符号整型
  7.     sbyte sb = 1;
  8.     short s = 1;
  9.     int i = 1;
  10.     long l = 1;
  11. //浮点型
  12.     float f = 1f;
  13.     double d = 1.1;
  14.     decimal de = 1.1m;
  15. //特殊类型
  16.     bool bo = true;
  17.     char c = 'a';
  18.     string str = "strs";
  19. //复杂数据类型
  20. //enum 枚举
  21. //数组 (一维,二维,交错)
  22. //类
  23. //结构体
复制代码
值类型和引用类型区别
值类型  在相互赋值时 把内容复制给对方 它变我不变
引用类型在相互赋值时 让两者指向同一个值 它变我也变
  1.     //1、使用上的区别
  2.     //值类型
  3.     int a = 10;
  4.     //引用类型
  5.     int[] arr = { 1, 2, 3, 4, 5, 6, };
  6.     int b = a;
  7.     int[] arr2 = arr;
  8.     Console.WriteLine($"a={a},b={b}");
  9.     Console.WriteLine($"arr[0]={arr[0]},arr2[0]={arr2[0]}");
  10.     b = 20;
  11.     arr2[0] = 0;
  12.     Console.WriteLine("修改后:");
  13.     Console.WriteLine($"a={a},b={b}");
  14.     Console.WriteLine($"arr[0]={arr[0]},arr2[0]={arr2[0]}");
  15.     //值类型  在相互赋值时 把内容复制给对方 它变我不变
  16.     //引用类型在相互赋值时 让两者指向同一个值 它变我也变
  17.     //2、原因
  18.     //它们在内存的存储方式是不同的
  19.     //值类型存储在 栈空间,由系统分配,自动回收,小而快
  20.     //引用类型存储在 堆空间,手动申请和释放,大而慢
  21.     //new了新的内存空间,就和arr没关系了
  22.     arr2 = new int[] {99,1,2,3};
  23.     Console.WriteLine($"arr[0]={arr[0]},arr2[0]={arr2[0]}");
复制代码
string的它变我不变
  1.     //string的它变我不变
  2.     string str1 = "123";
  3.     string str2 = str1;
  4.     //string特殊的地方在于重新赋值时会在堆中重新分配空间,因此它变我不变
  5.     //在频繁对string重新赋值时,会产生内存垃圾
  6.     str2 = "321";
复制代码
4 函数

4.1 函数语法
  1.     //无参无返回值
  2.     static void SayHello()
  3.     {
  4.         Console.WriteLine("你好!");
  5.     }
  6.     //有参无返回值
  7.     static void SayYourName(string name)
  8.     {
  9.         Console.WriteLine($"你的名字是:{name}");
  10.     }
  11.     //无参有返回值
  12.     static string YourName()
  13.     {
  14.         return "tyy";
  15.     }
  16.     //有参有返回值
  17.     static int Sum(int a, int b) => a + b;//一行代码的可以用=>表示返回值
  18.     //有参有多返回值(用数组)
  19.     static int[] SumAverage(int a, int b)
  20.     {
  21.         int sum = a + b;
  22.         int avg = sum / 2;
  23.         //int[] arr = { sum, avg };
  24.         return new int[] {sum,avg};//一步返回数组需要new
  25.     }
  26.    
  27.     SayHello();
  28.     SayYourName("tyy");
  29.     SayYourName(YourName());//一个函数的返回值作为另一个函数的参数传入
  30.     Console.WriteLine(Sum(1,2));
  31.     int[] arr = SumAverage(7, 9);//也用数组接收函数的数组返回值
  32.     Console.WriteLine($"{ arr[0]}, {arr[1]}");
复制代码
4.2 ref 和 out

作用:可以解决在函数内部改变外部传入的参数,函数里面改变外面也会改变
  1.     //普通函数
  2.     static void ChangeValue(int value)
  3.     {
  4.         value = 3;
  5.     }
  6.     static void ChangeArray(int[] arr)
  7.     {
  8.         arr = new int[] { 10, 20, 30 };//重新声明数组,外面没有改变
  9.     }
  10.     static void ChangeArrayValue(int[] arr)
  11.     {
  12.         arr[0] = 99;
  13.     }
  14.    
  15.     //参数加ref
  16.     static void ChangeValueRef(ref int value)//定义参数前面加上ref
  17.     {
  18.         value = 3;
  19.     }
  20.     static void ChangeArrayRef(ref int[] arr)
  21.     {
  22.         arr = new int[] { 10, 20, 30 };
  23.     }
  24.    
  25.     //参数加out
  26.     static void ChangeValueOut(out int value)//定义参数前面加上out
  27.     {
  28.         value = 33;
  29.     }
  30.     static void ChangeArrayOut(out int[] arr)
  31.     {
  32.         arr = new int[] { 100, 20, 30 };
  33.     }
  34.    
  35.     int a = 1;
  36.     ChangeValue(a);//a的值没有改变,因为int是值类型
  37.     ChangeValueRef(ref a);//传入参数前也要加上ref或out,修改成功
  38.     ChangeValueOut(out a);
  39.    
  40.     int[] arr1 = {1, 2, 3 };
  41.     ChangeArray(arr1);//函数内重新声明数组,原数组元素值未改变
  42.     ChangeArrayValue(arr1);//a[0]改变了
  43.     ChangeArrayRef(ref arr1);//一起改变了
  44.     ChangeArrayOut(out arr1);
复制代码
4.3 变长参数 params 和参数默认值

4.3.1 变长参数

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

  • params 关键字后面一定是数组
  • 数组可以是任意类型
  • 函数的参数可以是 其他类型的参数和 params 修饰的参数
  • 最多只能有一个 params 关键字,且一定放在最后一组参数
  1. static int Sum(params int[] arr)
  2. {
  3.     int sum = 0;
  4.     for(int i = 0; i < arr.Length; i++)
  5.     {
  6.         sum += arr[i];
  7.     }
  8.     return sum;
  9. }
  10. Sum();
  11. Sum(1, 2, 3, 4, 1, 2, 4, 12, 5, 235, 5, 23, 1, 4, 1);//任意长的参数个数都可以
复制代码
4.3.2 参数默认值

当函数调用时如果不传入参数,则使用默认值作为参数传入
每个参数都可以有默认值,有默认值的参数必须写在普通参数的后面
  1. static void Speak(string str = "没什么说的")
  2. {
  3.     Console.WriteLine(str);
  4. }
  5. Speak();//使用默认参数
  6. Speak("giao!");//使用传入参数
复制代码
4.4 函数重载

在同一语句块中,函数的名字相同,但参数的数量、类型或顺序不同,与返回值无关
  1.     static int Sum(int a, int b)
  2.         {
  3.             return a + b;
  4.         }
  5.         
  6.     static int Sum(int a, int b, int c)//参数数量不同
  7.     {
  8.         return a + b + c;
  9.     }
  10.     static float Sum(int a, float b)//参数类型不同
  11.     {
  12.         return a + b;
  13.     }
  14.     static float Sum(float a, int b)//参数顺序不同
  15.     {
  16.         return a + b;
  17.     }
  18.     static int Sum(ref int a, int b)//ref和out也算重载,但一个重载的话另一个就不能重载了,两个中只取一
  19.     {
  20.         return a + b;
  21.     }
  22.     static int Sum(out int a, int b)//ref和out也算重载,但一个重载的话另一个就不能重载了
  23.     {
  24.         a = 1;
  25.         b = 2;
  26.         return a + b;
  27.     }
  28.     static float Sum(int a, int b, params int[] arr)//变长参数重载
  29.     {
  30.         return 1;
  31.     }
复制代码
5 结构体
  1. struct Student
  2. {
  3.     //public和private修饰结构体中的变量和函数,表示能否被外部使用
  4.     //默认(啥都不写)为private
  5.     //变量
  6.     public int age;
  7.     public bool sex;
  8.     public int number;
  9.     public string name;
  10.     //函数方法 表现这个结构体的行为,不需要加static关键字
  11.     public void Speak()
  12.     {
  13.         //函数中可以直接使用结构体声明的变量
  14.         Console.WriteLine($"我的名字是{name},今年{age}岁");
  15.     }
  16.     //构造函数 用于在外部方便结构体的初始化
  17.     //没有返回值,和结构体名字相同,必须有参数,声明构造函数必须对其中所有变量初始化
  18.     public Student(int age, bool sex, int number, string name)
  19.     {
  20.         //this关键字,相同变量名字时来区分自己和参数
  21.         this.age = age;//必须初始化
  22.         this.sex = sex;
  23.         this.number = number;
  24.         this.name = name;
  25.     }
  26. }
  27.     Student s1;
  28.     s1.age = 10;//public才能在外部使用变量和函数
  29.     s1.sex = false;
  30.     s1.number = 1;
  31.     s1.name = "tyy";
  32.     s1.Speak();
复制代码
来源:https://www.cnblogs.com/tanyuyang/archive/2023/03/21/17241990.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具