第十四章:方法详解


本章目标

  1. 掌握C#中如何定义方法
  2. 没有参数和返回值的函数
  3. 有参数但没有返回值的函数
  4. 有参数且有返回值的函数
  5. 有多个参数的函数

本章内容

1、理解C#中的方法

  1. 概念:

    C# 中的函数(也可以称为方法)是一段具有签名(由函数名、参数类型和参数修饰符组成的函数信息)的代码块,可以用来实现特定的功能。

  2. 一般情况下一个函数由以下几个部分组成:

  • 访问权限修饰符:用于指定函数对一个类的可见性;public
  • 返回值类型:用于指定函数返回值的数据类型;
  • 函数名称:用于进行函数调用的唯一名称;
  • 参数列表:在调用函数时需要传递给函数的参数,参数列表是可选的,可以为空;
  • 函数主体:其中包含了实现函数功能的若干代码。
  1. 函数的声明:

    1
    2
    3
    4
    5
    访问修饰符 返回类型 方法名(参数列表 List)
    {
       方法主体;
       返回数据;
    }
     另外需要注意的是,访问权限修饰符、参数列表和返回语句是可选的,可以省略。 
    
  2. 函数的调用

    想要调用我们定义好的函数,

    1. 首先需要将函数所在的类实例化为对象

    2. 然后通过对象.函数名() 的形式即可调用指定的函数,

    3. 这里有几点需要注意:

      • 若函数在定义时参数列表中定义了若干参数,那么在调用时也应该在函数名后面的括号中填入相应数量的参数,并且与参数列表中的参数类型一一对应;
      • 若函数在定义时没有定义参数列表,那么在调用函数时也不需要在函数名后面填入参数;
      • 对于有返回值的函数,在调用函数时可以使用一个变量(可选)来接收函数的返回值,变量的类型要与函数返回值的类型相同。

      提示:若调用同一个类中静态函数(使用 static 修饰的函数),则可以省略实例化对象的过程,直接使用函数名()的形式调用。

2、没有参数和返回值的函数

C# 中,如果函数不需要返回任何内容,则可以在定义函数时使用 void 来修饰返回值类型,语法如下:

1
2
3
public void 方法名(){
方法体;
}

【示例】:定义学生类,创建方法,输入:大家好,我叫张三

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Student{
/*
* 定义一个没有返回值的函数
*/
public void SayHi(){
Console.WriteLine("大家好,我叫张三!");
}
}

internal class Program
{
/// <summary>
/// 入口方法
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Student stu=new Student();//实例化学生对象

stu.SayHi();//调用无参无返回类型的函数
}
}

运行结果如下:

1
大家好,我叫张三!

3、有参数但没有返回值的函数

函数可以接收一个或多个数据作为参数,并在函数内部使用或处理传入的参数。语法如下 :

1
2
3
public void 方法名(参数列表){
方法体;
}

【示例】:定义学生类,创建方法,定义输入张三参数,输出:大家好,我叫张三

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Student{
/*
* 定义一个没有返回值,有一个参数的函数
*/
public void SayHi(string name){//形参,指定传入参数的类型
Console.WriteLine("大家好,我叫{0}!",name);
}
}

internal class Program
{
/// <summary>
/// 入口方法
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
string name="张三";
Student stu=new Student();//实例化学生对象

//传入的参数为实参,必须和定义方法的参数类型一致
stu.SayHi(name);//调用有一个参数,无返回类型的函数
}
}

4、有多个参数但没有返回值的函数

参数列表可以用逗号分隔,语法如下:

1
2
3
public void 方法名(数据类型 参数1,数据类型 参数2,.....){
方法体;
}

【示例】:定义学生类,创建方法,定义输入姓名,年龄,爱好三个参数,输出相应内容!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Student{
/*
* 定义一个没有返回值,有一个参数的函数
*/
public void SayHi(string name,int age,string hobby){//多个形参,指定传入参数的类型
Console.WriteLine("大家好,我叫{0},今年:{1},爱好:{2}!",name,age,hobby);
}
}

internal class Program
{
/// <summary>
/// 入口方法
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
string name="张三";
int age=20;
string hobby="打篮球";
Student stu=new Student();//实例化学生对象

//传入的参数为实参,必须和定义方法的参数类型一致
stu.SayHi(name,age,hobby);//调用有一个参数,无返回类型的函数
}
}

输出结果:

1
大家好,我叫张三,今年:20,爱好:打篮球

注意事项:

  1. 调用方法时,实参的数量和形参数量要一致
  2. 调用方法时,实参的数据类型和形参的类型要匹配,顺序要相同

5、有参数且有返回值的函数

一个函数可以具有零个或任意数量的参数,也可以返回指定的数据,语法如下 :

1
2
3
4
public 返回类型 方法名(数据类型 参数1,数据类型 参数2,.....){
方法体;
return 返回数据;//注意返回的数据类型必须和定义的返回类型一致
}

【示例】:定义学生类,创建方法,定义输入姓名,年龄,爱好三个参数,返回相应的信息,在调用方输出相应内容!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Student{
/*
* 定义一个没有返回值,有一个参数的函数
*/
public string SayHi(string name,int age,string hobby){//多个形参,指定传入参数的类型
string returnString=string.Format("大家好,我叫{0},今年:{1},爱好:{2}!",name,age,hobby);

return returnString;//返回数据
}
}

internal class Program
{
/// <summary>
/// 入口方法
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
string name="张三";
int age=20;
string hobby="打篮球";
Student stu=new Student();//实例化学生对象

//传入的参数为实参,必须和定义方法的参数类型一致
string str=stu.SayHi(name,age,hobby);//调用方法,接受返回的数据
Console.WriteLine(str);//可输出数据
}
}

6、将对象作为方法的参数

在方法里面可以有N个参数,那么是否可以将对象作为参数传递呢?

【示例】:在学生类里面,创建一个方法,将老师作为参数传入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Teacher{
public string name;
public int age;

//老师的方法,实现自我介绍
public void SayHi(){
Console.WriteLine("大家好,我是{0},今年{1}岁,以后我就是你们的授课老师!",name,age);
}
}

public class Student{
//创建一个介绍老师的方法,传递老师对象
public void SayTeacher(Teacher teacher){
teacher.SayHi();//调用老师的介绍方法
}
}

internal class Program
{
static void Main(string[] args)
{
Teacher teacher=new Teacher();
teacher.name="刘老师";
teacher.age=30;

Student stu=new Student();
stu.SayTeacher(teacher);//将对象作为参数传入
}
}

7、将对象数组作为参数传入方法

上例可以将对象作为参数传入方法,那么怎么将对象数组作为方法参数传入呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class Teacher{
public string name;
public int age;
public string teachingSubject;

//老师的方法,实现自我介绍
public void SayHi(){
Console.WriteLine("大家好,我是{0},今年{1}岁,以后我就是你们{2}授课老师!",name,age,teachingSubject);
}
}

public class Student{
//创建一个介绍老师的方法,传递老师对象
public void SayTeacher(Teacher[] teachers){
foreach(Teacher t in teachers){
t.SayHi();//调用老师的介绍方法
}
}
}

internal class Program
{
static void Main(string[] args)
{
Teacher teacher1=new Teacher();
teacher1.name="刘老师";
teacher1.age=30;
teacher1.teachingSubject="C#";

Teacher teacher2=new Teacher();
teacher2.name="张老师";
teacher2.age=20;
teacher2.teachingSubject="Java";

Teacher teacher3=new Teacher();
teacher3.name="王老师";
teacher3.age=35;
teacher3.teachingSubject="Sql Server";

Teacher[] teachers=new Teacher[3];
teachers[0]=teacher1;
teachers[1]=teacher2;
teachers[2]=teacher3;

Student stu=new Student();
stu.SayTeacher(teachers);//将对象作为参数传入
}
}

本章总结

​ 掌握C#中的各种类型的方法

课后作业