C# base关键字:调用父类成员方法
在上一节《C# VS2015类图的使用》中介绍的继承关系的类图中可以看出,在每个类中都有 Print 方法,即子类和父类中有同名的方法。
那么这种方式是方法的重载吗?答案是否定的,方法重载是指方法名相同而方法的参数不同的方法。
在 C# 语言中子类中定义的同名方法相当于在子类中重新定义了一个方法,在子类中的对象是调用不到父类中的同名方法的,调用的是子类中的方法。
因此也经常说成是将父类中的同名方法隐藏了。
【实例 1】在 Main 方法中分别创建前面编写过的 Person、Teacher 以及 Student 类的对 象,并调用其中的 Print 方法。
根据题目要求,代码如下。
从上面的执行效果可以看出,在创建不同类的对象后,调用同名的方法 Print 效果是不同的。
创建子类的对象仅能调用子类中的 Print 方法,而与父类中的 Print 方法无关。
在继承的关系中,子类如果需要调用父类中的成员可以借助 base 关键字来完成,具体的用法如下。
【实例 2】改写实例 1 中的 Student 和 Teacher 类中同名的 Print 方法,使用 base 关键字 调用父类中的 Print 方法。
根据题目要求,更改后的代码如下。
从上面的执行效果可以看出,通过 base 关键字调用 Print 方法即可调用在父类中定义的语句。
那么这种方式是方法的重载吗?答案是否定的,方法重载是指方法名相同而方法的参数不同的方法。
在 C# 语言中子类中定义的同名方法相当于在子类中重新定义了一个方法,在子类中的对象是调用不到父类中的同名方法的,调用的是子类中的方法。
因此也经常说成是将父类中的同名方法隐藏了。
【实例 1】在 Main 方法中分别创建前面编写过的 Person、Teacher 以及 Student 类的对 象,并调用其中的 Print 方法。
根据题目要求,代码如下。
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(); } }执行上面的代码,效果如下图所示。
从上面的执行效果可以看出,在创建不同类的对象后,调用同名的方法 Print 效果是不同的。
创建子类的对象仅能调用子类中的 Print 方法,而与父类中的 Print 方法无关。
在继承的关系中,子类如果需要调用父类中的成员可以借助 base 关键字来完成,具体的用法如下。
base. 父类成员
如果在同名的方法中使用 base 关键字调用父类中的方法,则相当于把父类中的方法内容复制到该方法中。【实例 2】改写实例 1 中的 Student 和 Teacher 类中同名的 Print 方法,使用 base 关键字 调用父类中的 Print 方法。
根据题目要求,更改后的代码如下。
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); } }在实例 1 的 Main 方法中创建子类对象调用 Print 方法的代码不用修改,重新执行后效 果如下图所示。
从上面的执行效果可以看出,通过 base 关键字调用 Print 方法即可调用在父类中定义的语句。
说明:用户在程序中会遇到 this 和 base 关键字,this 关键字代表的是当前类的对象,而 base 关键字代表的是父类中的对象。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频