Skip to content

方法与数组

方法

方法是将一段具有独立功能的代码封装起来,方便其他任何地方调用。

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);

重载

概念:在同一个类中,定义多个同名的方法,每个方法有不同的参数类型或参数个数,称为方法的重载。

注意

  1. 参数的 个数类型类型顺序不同 即可构成重载;

  2. 重载与方法的返回值无关;

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]);

Released under the MIT License.