C# 函数覆盖总结学习(推荐)
作者:jingxian 时间:2021-12-27 00:33:05
覆盖类成员:通过new关键字修饰虚函数表示覆盖该虚函数。
一个虚函数被覆盖后,任何父类变量都不能访问该虚函数的具体实现。
public virtual void IntroduceMyself(){...}//父类虚函数
public new void IntroduceMyself(){...}//子类覆盖父类虚函数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MethodOverrideByNew
{
public enum Genders {
Female=0,
Male=1
}
public class Person {
protected string _name;
protected int _age;
protected Genders _gender;
/// <summary>
/// 父类构造函数
/// </summary>
public Person() {
this._name = "DefaultName";
this._age = 23;
this._gender = Genders.Male;
}
/// <summary>
/// 定义虚函数IntroduceMyself()
/// </summary>
public virtual void IntroduceMyself() {
System.Console.WriteLine("Person.IntroduceMyself()");
}
/// <summary>
/// 定义虚函数PrintName()
/// </summary>
public virtual void PrintName() {
System.Console.WriteLine("Person.PrintName()");
}
}
public class ChinesePerson :Person{
/// <summary>
/// 子类构造函数,指明从父类无参构造函数调用起
/// </summary>
public ChinesePerson() :base(){
this._name = "DefaultChineseName";
}
/// <summary>
/// 覆盖父类方法IntroduceMyself,使用new关键字修饰虚函数
/// </summary>
public new void IntroduceMyself() {
System.Console.WriteLine("ChinesePerson.IntroduceMyself()");
}
/// <summary>
/// 重载父类方法PrintName,使用override关键字修饰虚函数
/// </summary>
public override void PrintName(){
System.Console.WriteLine("ChinesePerson.PrintName()");
}
}
class Program
{
static void Main(string[] args)
{
//定义两个对象,一个父类对象,一个子类对象
Person aPerson = new ChinesePerson();
ChinesePerson cnPerson = new ChinesePerson();
//调用覆盖的方法,父类对象不能调用子类覆盖过的方法,只能调用自身的虚函数方法
aPerson.IntroduceMyself();
cnPerson.IntroduceMyself();
//调用重载方法,父类对象和子类对象都可以调用子类重载过后的方法
aPerson.PrintName();
cnPerson.PrintName();
System.Console.ReadLine();
}
}
}
结果:
Person.IntroduceMyself()
ChinesePerson.IntroduceMyself()
ChinesePerson.PrintName()
ChinesePerson.PrintName()
标签:C#,函数覆盖
0
投稿
猜你喜欢
Mybatis配置之typeAlias标签的用法
2023-11-27 20:18:20
C#基于Socket实现多人聊天功能
2021-12-06 12:00:47
vc提示unexpected end of file found的原因分析
2022-01-19 12:58:00
Spring Security保护用户密码常用方法详解
2023-01-24 17:06:18
Spring Boot Logback配置日志过程解析
2022-12-09 18:08:06
.NET实现:将EXE设置开机自动启动
2022-02-25 05:49:25
mybatisPlus条件构造器常用方法小结
2023-12-16 07:04:09
Android recyclerview实现纵向虚线时间轴的示例代码
2023-08-23 07:03:39
详解java中float与double的区别
2021-09-12 11:04:47
Spring Boot Hello World的实现代码
2023-10-13 17:45:01
Android入门之RelativeLayout、FrameLayout用法分析
2021-10-16 03:21:32
详解C# ConcurrentBag的实现原理
2022-11-17 02:26:05
关于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服务传输的问题
2023-01-04 15:38:04
C# List 并发丢数据问题原因及解决方案
2023-06-18 17:53:54
c# Linq distinct不会调用Equals方法详解
2021-09-03 09:53:13
关于spring boot中几种注入方法的一些个人看法
2022-09-07 10:15:14
关于MyBatis中SqlSessionFactory和SqlSession简解
2022-02-18 13:57:37
Java执行cmd命令的举例与注意事项
2023-11-03 10:21:05
Java多线程之ThreadLocal浅析
2023-06-19 19:55:37
mybatis中批量插入的两种方式(高效插入)
2023-09-16 22:21:07