C#学习笔记(2)

函数(Functions):

1. 没有返回值的函数


class Program
{
static void Write()
{
Console.WriteLine("Text output from function.");
}
static void Main(string[] args)
{
Write();
Console.ReadKey();
}
}

2. 有返回值的函数


static <returnType> <FunctionName>()
{
//执行代码
return <returnValue>;
}

3. 有参数的函数


static <returnType> <FunctionName>(<paramType> <paramName>, ...)
{
//执行代码

return <returnValue>;
}


class Program
{
static int MaxValue(int[] intArray)
{
int maxVal = intArray[0];
for (int i = 1; i < intArray.Length; i++)
{
if (intArray[i] > maxVal)
maxVal = intArray[i];
}
return maxVal;
}

static void Main(string[] args)
{
Defining and Using Functions ❘ 131
int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 };
int maxVal = MaxValue(myArray);
Console.WriteLine("The maximum value in myArray is {0}", maxVal);
Console.ReadKey();
}
}

*C#中的特殊参数–参数数组(parameter array)

关键字为 params, 注意,该参数必须为最后一个。


static <returnType> <FunctionName>(<p1Type> <p1Name>, ...,params <type>[] <name>)
{
//执行代码
return <returnValue>;
}

调用


<FunctionName>(<p1>, ..., <val1>, <val2>, ...)

p1, p2为一般参数,val1, val2为参数数组参数。

实例:


class Program
{
static int SumVals(params int[] vals)
{
int sum = 0;
foreach (int val in vals)
{
sum += val;
}
return sum;
}
static void Main(string[] args)
{
int sum = SumVals(1, 5, 2, 9, 8);
Console.WriteLine("Summed Values = {0}", sum);
Console.ReadKey();
}
}

*引用和数值参数

数值参数:当你用参数的时候,你实际上是把一个值传给了一个函数中使用的变量。对这个函数中的变量所做的任何改变都不会影响函数中的参数。(That is, when you have usedparameters, you have passed a value into a variable used by the function. Any changes made to thisvariable in the function have no effect on the parameter specified in the function call.)

例如,一个把参数乘以2再显示出来的函数:


static void ShowDouble(int val)
{
val *= 2;
Console.WriteLine("val doubled = {0}", val);
}

上面的代码里,参数 val 在函数里被乘以2,如果你这样调用:


int myNumber = 5;
Console.WriteLine("myNumber = {0}", myNumber);
ShowDouble(myNumber);
Console.WriteLine("myNumber = {0}", myNumber);

输出如下:

myNumber = 5
val doubled = 10
myNumber = 5

用 myNumber 当作ShowDouble()的一个参数进行运算并不会影响mian()中的myNumber中的值。

但是,如果你想要myNumber中的值改变,你遇到了麻烦。你可能会用一个函数来返回一个新的值给myNumber这个变量,像这样:


static int DoubleNum(int val)
{
val *= 2;
return val;
}

你这样来调用:


int myNumber = 5;
Console.WriteLine("myNumber = {0}", myNumber);
myNumber = DoubleNum(myNumber);
Console.WriteLine("myNumber = {0}", myNumber);

然而,这种代码很不直观并且不能处理多个变量的值,因为一个函数只有一个返回值。

在这种情况下,就需要用到 reference。任何对这个参数做的改变都回返回给该参数。调用的关键字为ref。

实例:


static void ShowDouble(ref int val)
{
val *= 2;
Console.WriteLine("val doubled = {0}", val);
}

然后,在调用函数的时候还要再次用ref关键字:


int myNumber = 5;
Console.WriteLine("myNumber = {0}", myNumber);
ShowDouble(ref myNumber);
Console.WriteLine("myNumber = {0}", myNumber);

输出如下:

myNumber = 5
val doubled = 10
myNumber = 10

注意,用ref型参数的时候有两个限制。第一,变量必须不能是常数。

例如,


const int myNumber=5;

Console.WriteLine("myNumber = {0}", myNumber);
ShowDouble(ref myNumber);
Console.WriteLine("myNumber = {0}", myNumber);

这就是非法的。

第二,变量必须有一个初始值。

例如,


int myNumber;

ShowDouble(ref myNumber);

Console.WriteLine(“myNumber = {0}", myNumber);

这就是非法的。

注:这些都是当时没看懂得,自己翻译了一遍之后好像懂了点儿。

发表评论

电子邮件地址不会被公开。 必填项已用*标注