C#学习记录——函数:定义和使用函数
『Stay hungry, Stay foolish.』—— 乔布斯斯坦福大学毕业演讲
函数
为什么要使用函数?
某些任务常需要在一个程序中执行好几次,例如查找数组中的最大值。此时可以把几乎相同的代码块按照需要放在应用程序中,但这样存在一个问题。在某个常见任务中,即使进行非常小的改动,也需要修改多个代码块,而这些代码块可能分布在整个应用程序中。如果忘了修改其中一个代码块,就会产生很大影响。
解决这个问题的方法就是使用函数。
在C#中函数可提供在应用程序中的任何一处执行的代码块。
例如:有一个函数返回数组中的最大值,可在代码的任何位置使用这个函数,且在每个地方都使用相同的代码行。因为只需要提供一次这段代码,所以对代码的任何修改将影响使用该函数进行的计算。这个函数可以看成包含可重用的代码。
函数还可以提高代码的可读性,因为可以使用函数将相关代码组合在一起。这样应用程序主体就会非常短,因为代码的内部工作被分散了。
函数还可以用于创建多用途的代码,让它们对不同的数据执行相同的操作。可以采用参数形式为函数提供信息,以返回值的形式得到函数的结果。
定义和使用函数
函数的定义包括函数名、返回类型以及一个参数列表,这个参数列表指定了该函数需要的参数数量和参数类型。函数的名称和参数(不是返回类型)共同定义了函数的签名。
练中学:定义和使用基本函数
(1)尝试把下述代码添加到Program.cs中:
using System;
namespace L016_ConsoleApp1
{
class Program
{
static void Write()
{
Console.WriteLine("Text output from function");
}
static void Main(string[] args)
{
Write();
Console.ReadKey();
}
}
}
(2)执行代码:结果如下:
示例说明
下面的4行代码定义了函数Write():
static void Write()
{
Console.WriteLine("Text output from function");
}
从上面示例可以看出函数定义由一下几部分组成:
1、两个关键字:static和void
2、函数名后跟圆括号,如:Write()
3、一个要执行的代码块,放在花括号内
**注意:**一般采用PascalCase形式编写函数名。
上述函数是使用关键字static和void定义的。
关键字static与面向对象的概念相关;
关键字void表明函数没有返回值;
调用函数的代码:Write();,键入函数名,后跟空括号即可。当程序执行到这行代码时,就会运行Write()函数中的代码。
注意: 在定义和调用函数时,必须使用圆括号。如果删除它们,将无法编译代码。
返回值
通过函数进行数据交换的最简单方式是利用返回值。有返回值的函数会最终计算得到这个值,就像在表达式中使用变量时,会计算得到变量包含的值一样。与变量一样,返回值也有数据类型。
例如,有个函数GetString(),其返回值是一个字符串,如下:
string myString;
myString=GetString();
当函数返回一个值时,可以采用以下两种方式修改函数:
1、在函数声明中指定返回值的类型,但不使用关键字void。
2、使用return关键字结束函数的执行,把返回值传送给调用代码。
参数
当函数接受参数时,必须指定以下内容:
1、函数在其定义中指定接受的参数列表,以及这些参数的类型。
2、在每个函数调用中提供匹配的实参列表。
注意:
仔细阅读C#规范会发现形参和实参之间存在一些细微区别:形参是函数定义的一部分,而实参则由调用代码传递给函数。
示例代码如下所示,其中可以有任意数量的参数,每个参数都有类型和名称:
static <returnType><FunctionName>(<paramType><paramName>,...)
{
...
return<returnValue>;
}
参数之间用逗号隔开。每个参数都在函数的代码中用作一个变量。
例如:下面是一个简单的函数,带有两个double参数,并返回它们的乘积:
static double Product(double param1,double param2)=>param1*param2
练一练(1):通过函数交换数据
(1)把下列代码添加到Program.cs中:
using System;
namespace L017_ConsoleApp1
{
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)
{
int[] myArray = { 1, 8, 3, 6, 2, 15, 9, 3, 0, 2 };
int maxVal = MaxValue(myArray);
Console.WriteLine($"The maximum value in myArray is {maxVal}");
Console.ReadKey();
}
}
}
(2)执行代码,结果如下图:
练一练(2):通过带有params函数交换数据
(1)把下述代码添加到Program.cs中:
using System;
namespace L018_ConsoleApp1
{
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, 12, 9, 8);
Console.WriteLine($"Summed Value={sum}");
Console.ReadKey();
}
}
}
(2)执行代码,结果如图:
相关文章
- Unity3D热更新全书-脚本(四) 用C#LightEvil搭建实际开发使用的脚本框架
- 《C#高级编程》学习笔记------C#中的委托和事件(续)
- C#.NET常见问题(FAQ)-如何让listView如何选中一行
- C# .NET using ManagementObjectSearcher提示缺少引用怎么办
- C# winform 学习(三)
- RPC学习--C#使用Thrift简介,C#客户端和Java服务端相互交互
- C#和nodejs的互操作
- C# 使用LINQ、泛型、Index函数优化switch(或者多条if)语句
- C# 获取当前时间
- C# 指针学习笔记之指针类型
- C# 将一个对象转换为指定类型
- 程序老鸟C#学习:3天学会全部基础--第二天
- (四十二)c#Winform自定义控件-进度条扩展-HZHControls
- C#里最简单的异步连接客户端
- (67)C#里怎么样获取关于文件、目录和驱动器的相关内容?
- C#学习笔记(六)——面向对象编程简介
- C#学习笔记(一)——HelloWorld!
- C# 学习笔记(三)----- 设备监视 ( System.Management )
- C#与.NET、CLR、CLI是什么关系?什么是.NET框架
- C# 笔记之基本语法