方法与数组
方法
方法是将一段具有独立功能的代码封装起来,方便其他任何地方调用。
C#
// 定义方法
public static void Say() => Console.WriteLine("Hello");
方法的参数
C#
// 定义带参方法
public static void Add(int x, int y) => Console.WriteLine(x + y);
Add(1, 2);
方法的返回值
作用:可以将函数内的结果向外暴漏,以便其他逻辑使用暴漏的结果。
C#
// 当只有一行时,省略 return
public static int Get(int x, int y) => x + y;
int num = Get(1, 2);
方法的默认参数
默认带参:
C#
public static void SayName(string name = "张三") => Console.WriteLine(name);
SayName(); // 不传参,默认张三
SayName("李四"); // 传参,则为李四
特殊带参:
注意
方法的可选参数必须 从右往左 放置!
C#
public static void AddSum(int x, int y = 0, int z = 0)
=> Console.WriteLine(x + y + z);
AddSum(1);
AddSum(1, 2);
AddSum(1, 2, 3);
重载
概念:在同一个类中,定义多个同名的方法,每个方法有不同的参数类型或参数个数,称为方法的重载。
注意
参数的 个数、类型、类型顺序不同 即可构成重载;
重载与方法的返回值无关;
C#
public static void GetSum(int x, int y) => Console.WriteLine(x + y);
public static void GetSum(double x, double y) => Console.WriteLine(x + y);
public static void GetSum(int x, int y, int z) => Console.WriteLine(x + y + z);
参数修饰符
ref
概念:允许参数以引用传递的方式给到方法中。简单来说,就是通过函数内的操作,从而改变原始定义的变量值。
原理
加了 ref 关键字以后,val 形参的栈内地址指向了 实参a 的栈内地址,二者共用一个地址!
C#
public static void Add(ref int val)
{
val += 5;
}
int a = 10;
Add(ref a);
Console.WriteLine(a); // 15
in
概念:可用于将变量设置为 只读变量,即只能读取,不可赋值。
使用场景
希望在函数执行过程中,只对参数 val 进行一次赋值,在函数内部不能更改其值!
C#
public static void InExam(in int val)
{
Console.WriteLine(val); // 只能读取
// val += 2; // 不能赋值
}
int a = 10;
InExam(in a);
out
概念:进入方法后,参数值被清空,必须重新复制后才可使用。
C#
public static void OutExam(out int val)
{
val = 2;
}
int a = 10;
OutExam(out a); // a = 10在进入函数内部后会被重新赋值
数组
概念:数组是一个容器,存储了相同类型的数据集合。
C#
// 定义数组
int[] arr = new int[5] { 1, 2, 3, 4, 5 };
int[] arr1 = { 1, 2, 3, 4, 5 };
int[] arr2 = [1, 2, 3, 4, 5];
数组遍历
C#
// for 循环
for (int i = 0; i < arr.Length; i++) { ... }
C#
// foreach 循环
foreach(var item in arr { ... }
数组初始值
类型 | 初始值 |
---|---|
整数(byte、short、int) | 0 |
浮点数(float、double) | 0.0 |
布尔类型(bool) | False |
字符类型(char) | '\0'(空字符串) |
引用数据类型(数组、string、类) | null |
二维数组
C#
int[,] arr0 = new int[3,3] { { 90, 80, 70 }, { 95, 85, 75 }, { 30, 20, 10 } };
// 简写
int[,] arr = { { 90, 80, 70 }, { 95, 85, 75 }, { 30, 20, 10 } };
// 获取二维数组的值
arr[1, 2];
二维数组遍历
双重 for 循环
API | 描述 |
---|---|
arr.GetLenth(0) | 获取二维数组的行数 |
arr.GetLenth(1) | 获取二维数组的列数 |
C#
for (int i = 0; i < arr2.GetLength(0); i++)
{
for (int j = 0; j < arr2.GetLength(1); j++)
{
Console.WriteLine(arr2[i, j]);
}
}
foreach 遍历
注意
foreach遍历的只能读取值,并不能修改值!
C#
foreach (var item in arr2)
{
Console.WriteLine(item);
}
锯齿数组
概念:锯齿数组是指存放数组的数组。
C#
//锯齿数组
int[][] arr = new int[2][];
int[] arr1 = { 1, 2, 3 };
int[] arr2 = { 4, 5 };
arr[0] = arr1;
arr[1] = arr2;
// 读取 arr 中第一个数组的第二个元素
Console.WriteLine(arr[0][1]);