C#数组参数与变量作用域详解
在C#编程中,方法参数可以接受任何C#支持的数据类型,包括数组类型。下面我们将通过两个实例来演示数组作为方法参数的使用方式。
实例一:员工薪资遍历显示 假设我们需要输入5位员工的薪资,并编写一个方法遍历并输出所有员工的薪资。
首先,我们定义一个用于遍历显示薪资的方法。该方法签名如下:
public static void DisplaySalaries(int[] compensation)
{
foreach (int amount in compensation)
{
Console.WriteLine(amount);
}
}
在Main方法中,我们需要初始化数组并调用上述方法:
// 声明并初始化薪资数组
int[] wages = new int[5];
Console.WriteLine("请输入5位员工的薪资:");
for (int index = 0; index < wages.Length; index++)
{
wages[index] = int.Parse(Console.ReadLine());
}
// 调用方法输出薪资
DisplaySalaries(wages);
当使用数组作为方法参数时,形参和实参的语法格式如下:
- 形参:数据类型[] 数组名
- 实参:数组名
实例二:薪资上调功能 在第一个实例的基础上,我们增加一个方法实现每位员工薪资上调20%的功能。
public static void IncreaseSalaries(int[] compensation)
{
for (int index = 0; index < compensation.Length; index++)
{
compensation[index] += (int)(compensation[index] * 0.2);
}
}
在Main方法中,我们可以在显示薪资前先调用此方法:
// 调用薪资上调方法
IncreaseSalaries(wages);
Console.WriteLine("上调后的薪资:");
// 调用方法输出薪资
DisplaySalaries(wages);
从运行结果可以看出,即使没有使用引用传递方式,数组wages的值依然发生了改变。这是因为数组名存储的是数组首元素的地址,在参数传递时,会将数组wages首元素的地址复制给数组compensation,两者指向同一个数组。因此,通过compensation可以修改wages的值。
与其他数据类型(如int、double)不同,数组属于引用类型变量,而int、double等属于值类型变量。
接下来,我们深入了解变量的作用域。
作用域是指事物起作用或有效的区域。在程序中,变量有不同的使用范围,称为变量的作用域,它决定了变量的可访问性。
声明在方法或语句块中的变量称为局部变量,其作用域仅限于所在的方法或语句块中。
例如,我们通过一个加法方法演示变量的作用域:
public static int CalculateSum(int firstNumber, int secondNumber)
{
return firstNumber + secondNumber;
}
static void Main(string[] args)
{
for (int counter = 0; counter < 5; counter++)
{
Console.WriteLine("Hello World!");
}
Console.WriteLine(counter); // 错误:当前上下文中不存在名称"counter"
int x = 10, y = 20;
int total = CalculateSum(x, y);
}
在这个例子中:
- Main方法中的变量counter定义在for循环内,只能在循环内部使用
- Main方法中的x、y和total定义在Main方法内,作用域为整个Main方法
- CalculateSum方法中的firstNumber和secondNumber只在该方法内有效
如果在变量作用域之外访问变量,将出现编译错误。