详解C#用new和override来实现抽象类的重写区别
作者:叶丶梓轩 时间:2022-12-02 01:50:51
一,抽象的实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Virtualdemo
{
class Program
{
static void Main(string[] args)
{//BClass A = new BClass(); 抽象类无法被实例
Class1 c = new Class1();
BClass c2 = c;
c2.MethodA();
c.MethodA();
c2.MethodB();
c.MethodB();
c2.MethodC();
c.MethodC();
Console.ReadKey();
}
}
abstract class BClass //抽象类无法被实例
{
public virtual void MethodA() { Console.WriteLine("BClassA"); }
public virtual void MethodB() { Console.WriteLine("BClassB"); }
public virtual void MethodC() { Console.WriteLine("BClassC"); }
}
class Class1 : BClass
{
public void MethodA() { Console.WriteLine("MethodA"); }//如果一个虚函数 在子类中没有通过override关键字,那么这个方法就没有被重写,而是被隐藏了
public override void MethodB() { Console.WriteLine("MethodB"); }
public override void MethodC() { base.MethodC(); }
}
}
从上图得出的结果是:
综上:抽象类的虚方法需要被重写,那问题来了重写有两种方式,new和override又有什么区别
二,new和override重写的区别:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Virtualdemo
{
class Program
{
static void Main(string[] args)
{
Teacher t = new Teacher();
Student stu = t;
stu.Exam();
stu.Say();
t.Say();
Console.ReadKey();
}
}
public abstract class Student
{
public virtual void Exam()
{
Console.WriteLine("学生都要考试");
}
public void Say()
{
Console.WriteLine("我是学生");
}
}
public class Teacher : Student
{
public override void Exam()
{
Console.WriteLine("老师不用考试");
}
//public override void Say() //报错,提示没有virtual,无法被重写
//{
// Console.WriteLine("我是老师");
//}
public new void Say()
{
Console.WriteLine("我是老师");
}
}
}
结果显示为:
综上总结:
1、如果基类没有定义虚方法,那子类只能使用new,而不能使用override
2、基类有没有定义虚方法,子类都可以使用new
3、子类使用new并不叫重写,而是子类新创建一个方法,只是新创建的这个方法刚好跟基类中的方法同名
来源:http://www.cnblogs.com/May-day/p/6367579.html
标签:c#,new,override
0
投稿
猜你喜欢
RestTemplate使用不当引发的问题及解决
2023-01-21 11:27:19
Java C++题解leetcode字符串轮转KMP算法详解
2023-05-30 11:28:49
Java基础之八大排序算法
2022-02-05 12:35:47
简单谈谈C#中深拷贝、浅拷贝
2022-06-25 04:36:56
Java WebService开源框架CXF详解
2023-12-20 13:02:35
Unity实现单机游戏每日签到系统
2023-05-13 08:42:36
C#二维码图片识别代码
2022-01-15 13:03:51
Springboot快速入门教程
2023-03-02 21:50:56
Android高仿微信对话列表滑动删除效果
2022-10-29 21:12:43
解决MyEclipse出现the user operation is waiting的问题
2022-05-02 21:44:07
解决Callable的对象中,用@Autowired注入别的对象失败问题
2023-11-29 13:23:46
Mybatis判断空字符串的问题
2022-11-18 02:07:00
c# 开机启动项的小例子
2022-11-30 02:16:43
Android中 视频屏幕左半部分上下滑动改变亮度右半部分上下滑动改变声音
2021-08-13 02:57:12
Android实现跑马灯效果的方法
2021-09-06 13:56:38
Android中Retrofit的简要介绍
2022-07-19 08:42:49
java实现图书检索系统
2023-08-18 20:08:50
Java获取时间年、月、日的方法
2022-02-10 16:58:36
java实现Xml与json之间的相互转换操作示例
2023-06-21 13:30:39
使用Spring Boot 2.x构建Web服务的详细代码
2022-09-17 04:08:40