今天我们要学习的内容是函数,也叫做方法。
什么叫方法?
就是我们为了达到某个目的或者实现某项功能而设定的一系列步骤。
为什么要使用方法呢?
我们在之前编写的控制台应用程序都是写在Main()方法中的,在控制台应用程序中,程序的执行是以Main()方法为程序入口的,也就是说无论你Main()方法写在哪里,只要你执行这个程序,程序就要找到Main()方法,找到才按Main()方法里面的顺序执行,如果找不到Main()方法,程序就无法运行,进而报错。因此我们在创建控制台应用程序的时候VS会自动生成一个Main()方法。
既然有Main()方法,那么就有其他方法,其他方法存在的意义就是把一个要执行的代码段规整化。
比如我要算一个数跟另一个数的和,在Main()方法中当然可以计算,但是每一次计算我都要写一次它们计算的语句,那我不如将这些语句写在另一个位置,当我要用到这些语句的时候再来把它们拿过去,这些语句脱离了Main()方法,就成了其他方法。同时这也是我们使用方法的原因,它简化了我们的编码过程,不需要反复书写同样的代码。
之前我们用循环使得我们避开重复代码,但循环毕竟是一次性的,我想在任何时候都能执行这段重复的代码,循环是做不到的,只有方法可以做到。
那么方法怎么用呢?
我们先来看看Main()方法是怎么用的:
static void Main(string[] args)
{
}
首先一个关键字static,表示这个方法是静态的,然后一个void表示这个方法是没有返回值的,接着一个Main表示这个方法的名称是”Main”,后面一个括号,里面填了内容,说明这个方法是有参数的(暂时这么理解),最后一对花括号,花括号里面就是这个方法的方法体。我们的语句就写在这里。
接下来我们按照这个格式来自己定义一个方法:
namespace CSharp学习第七课
{
class Program {
static void Function() //这就是我们自己定义的一个方法
{
}
static void Main(string[] args)
{
}
}
}
可以看到我们定义的方法的方法名前面是关键字void,表示Function()这个方法是没有返回值的。
什么叫有没有返回值呢?意思就是说在执行这个方法过后,这个方法最终要不要把完成的结果给你送回来。
举个例子,现在我给你一万五千块钱,让你帮我去选购一台Mac,怎么选购是你的事,什么颜色、屏幕尺寸、硬盘容量也是你决定,你也不用问我很多细节,我让你去办了,你最终要抱回来一台Mac给我,OK,这叫有返回值!
现在我对你说我这有些东西需要搬运,你去帮我找几个人来,让他们直接过来就行了,你不用来了,这你也不用过问很多细节,什么身高、胖的还是瘦的、哪个学院的等等都是你决定,你只需要找到他们告诉他们来我这就可以了,你不需要再跑回来跟我说:“人找好了,他们是谁谁谁,谁谁谁。”,这就叫没有返回值,你完成了你的任务就好了,不需要给我最终的结果。
这是返回值的解释。
可以看到我们定义的方法的方法名后面括号里没有填写任何内容,表示Function()这个方法是参数的。
什么叫有没有参数呢?
没有参数意思就是说在执行这个方法的时候,这个方法是不需要额外给定参数的,尽管方法里面可能需要参数,但是是内部定义、内部使用的。
有参数意思就是说在执行这个方法的时候必须提供这个方法要用到的某些值,否则无法调用这个方法为你服务。
举个例子,现在我给你一万五千块钱,让你帮我去选购一台Mac,告诉你我要深灰色的、屏幕尺寸为21.5英寸、硬盘容量为1TB.这里面的深灰色、21.5英寸、1TB都是我给你提供的参数,你就用这些参数去选购,最终抱回来这样一台Mac,那我如果不跟你说这些参数,而你恰好有需要这些参数,那你就会觉得很为难,说:“你没告诉我参数,对不起,我给你办不了。”
同样的,没有返回值的方法也一样,在需要参数的时候也必须提供相应的参数才能调用成功。
下我们来看看有返回值的购买Mac方法:
static string ByMac(string color,double size,double capacity)
{
return "这就是您要的Mac!";
}
我们看static后面没有void而是string,表示这个方法有返回值,而且这个返回值是string类型的,后面的括号里填写了各种参数。
当方法有返回值的时候,方法体中最重要的就是一个return。return后面要接上相应类型的返回值,否则编辑器就会报错。
上面介绍了方法的声明,接下来看看方法怎么使用:
没有参数的方法直接在主方法中写上方法名,后面加上圆括号,最后以分号结束;
而有参数的方法还要在元括号里填上相应的参数变量,数量、顺序、类型都不能出错,否则编辑器也会报错的。
对于有返回值的方法,最好要用相应类型的变量去承接返回值,因为有返回值,这个返回值肯定是你想要用的嘛,你当然要存起来,否则的话要这个方法有什么用处呢?你帮我买来了一台Mac,买来后发现我不要,你也不知道给谁,那你忙活了半天有什么意义?(可以自己抱回家啊~~)
对于没有返回值的方法,可能大家会有疑问:既然没有返回值,那这个方法有什么意义呢?
OK,你帮我买来一台Mac,我不要,你也很负责任,给放到库房里去了,等我想用的时候,我可以随时去取嘛,就是这个道理。你现在只需要执行选购这个过程就好了。同样,我现在就要这个方法去执行,执行结果我不管,现在我还用不到。
这样下来我们就要举四个例子了:
namespace CSharp学习第七课
{
class Program
{
static string ByMac()
{
//balabalabab
return "这是一台Mac!";
}
static string ByMac2(string color,double size,double capacity)
{
//balabalabab
return "这就是您要的Mac!";
}
static void ByMac3()
{
//balabalabab
}
static void ByMac4(string color, double size, double capacity)
{
//balabalabab
}
static void Main(string[] args)
{
string res1 = ByMac();
string res2 = ByMac2("darkgray",21.5,1000);
ByMac3();
ByMac4("darkgray", 21.5, 1000);
}
}
}
上面就是有无返回值,有无参数的四个例子。
说到参数还要提到一个概念就叫做形参和实参。
这是什么东西呢?
我让你去买一台Mac,我心里知道我想要什么规格的,但是我不知道怎么表达出来,你跟我说,你把颜色跟我说一下,再把屏幕尺寸跟我说下,最后再把硬盘容量跟我说下,这里提到的颜色,尺寸,容量都是形参,你的意思是你就按照这种形式说一下你的要求。所以叫形式参数。
我把具体的颜色,具体的尺寸,具体的容量告诉你,这就叫实际参数。
static void ByMac4(string color, double size, double capacity)
{
//balabalabab
}
圆括号里面都是形参。
ByMac4("darkgray", 21.5, 1000);
圆括号里面都是实参。
我们有的时候会遇到数组参数,数组参数就是把一个数组作为一个参数传递给一个方法,然后这个方法对这个数组进行一系列操作。
既然数组可以作为一个参数,那么数组也同样作为一个返回值。
我们之前就遇到过返回值是一个数组的方法:Split()方法。
我们来分析一下这个方法,首先这个方法是有返回值的,而且是有参数的,返回值还是一个字符数组,那我们可以试着写一下:
namespace CSharp学习第七课
{
class Program
{
static char[] Split(string str)
{
char[] character=new char[1];
//balabalabaa 以上的代码都不需要关心
return character;
}
static void Main(string[] args)
{
string str1 = "asgnjl,afg,aga,ahgaer,aegr";
char[] res = Split(str1);
}
}
}
虽然Split()方法内部的实现我没有写出来,但是Split()方法却是是按照这个流程执行的。
这就是我们说的返回值是一个数组的方法。
以上就是我们今天的学习内容,我们来回顾一下:
1.什么是方法;
2.为什么要使用方法;
3.方法怎么用;
4.方法的组成与结构;
5.什么叫返回值,什么叫参数;
6.实参与形参的区别和概念;
7.除常见的返回值类型外,还有哪些特殊类型的返回值。
今天的学习就到这里,欢迎大家的批评与指正!万分感激!!