C#开发之——base关键字(6.7)

一 概述

  • 在C#语言中子类中定义的同名方法相当于在子类中重新定义了一个方法,在子类中的对象时调用不到父类中的同名方法的,调用的是子类中的方法
  • 因此也经常说成是将父类中的同名方法隐藏了

二 实例

2.1 实例一 在Main方法中分别创建前面编写过的Person、Teacher以及Student类的对象,并调用其中的Print方法

2.1.1 代码

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
49
50
51
52
53
54
namespace code_1
{
class Program
{
static void Main(string[] args)
{
Person person = new Person();
Console.WriteLine("Person类的Print方法打印内容");
person.Print();
Student student = new Student();
Console.WriteLine("Student类的Print方法打印内容");
student.Print();
Teacher teacher = new Teacher();
Console.WriteLine("Teacher类的Print方法打印内容");
teacher.Print();
}
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public string Cardid { get; set; }
public string Tel { get; set; }
public void Print()
{
Console.WriteLine("编号:" + Id);
Console.WriteLine("姓名:" + Name);
Console.WriteLine("性别:" + Sex);
Console.WriteLine("身份证号:" + Cardid);
Console.WriteLine("联系方式:" + Tel);
}
}
class Student : Person
{
public string Major { get; set; }
public string Grade { get; set; }
public void Print()
{
Console.WriteLine("专业:" + Major);
Console.WriteLine("年级:" + Grade);
}
}
class Teacher
{
public string Title { get; set; }
public string WageNo { get; set; }
public void Print()
{
Console.WriteLine("职称:" + Title);
Console.WriteLine("工资号:" + WageNo);
}
}
}

2.1.2 执行结果

2.1.3 说明

  • 从上面的执行结果可以看出,在创建不同类的对象后,调用同名的方法Print效果是不同的
  • 创建子类的对象仅能调用子类中的Print方法,而与父类中的Print方法无关
  • 在继承的关系中,子类如果需要调用父类中的成员可以借助base关键字来完成,具体的用法为base.父类成员
  • 如果在同名的方法中使用base关键字调用父类中的方法,则相当于把父类中的方法内容复制到该方法中

2.2 实例二 改写实例1中的Student和Teacher类中同名的Print方法,使用base关键字调用父类中的Print方法

2.2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Teacher:Person
{
public string Title { get; set; }
public string WageNo { get; set; }
public void Print()
{
base.Print();
Console.WriteLine("职称:" + Title);
Console.WriteLine("工资号:" + WageNo);
}
}
class Student:Person
{
public string Major { get; set; }
public string Grade { get; set; }
public void Print()
{
base.Print();
Console.WriteLine("专业:" + Major);
Console.WriteLine("年级:" + Grade);
}
}

2.2.2 执行结果

2.2.3 说明

  • 从上面的执行效果可以看出,通过base关键字调用Print方法即可调用在父类中定义的语句
  • 用户在程序中会遇到this和base关键字,this关键字代表的是当前类的对象,base关键字代表的是父类中的对象