C#重写(Override)详解,(您想了解的这儿都有)

您所在的位置:网站首页 什么是重写作文 C#重写(Override)详解,(您想了解的这儿都有)

C#重写(Override)详解,(您想了解的这儿都有)

2023-09-03 04:06| 来源: 网络整理| 查看: 265

目录: 一.重写的概念:二.重写的原因:1.调用子类继承父类中的方法:2.子类与父类有同名的方法:3.对其继承的方法进行隐藏: 三.重写的目的:四.重写的规则:五.重写的前提以及好处:

一.重写的概念:

既然想明白重写,首先肯定得了解它的概念,那么一起来看看究竟什么是重写呢? 重写:在父类中有一个方法,但是子类中也需要这个方法的名称,但是子类中的方法的逻辑与父类方法中的逻辑不相同,则需要在子类中对这个方法进行重写,重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

二.重写的原因:

如果父类中有一个方法,则子类中默认是不允许出现同名方法,如果出现了则系统认为是子类中要隐藏父类中的这个同名方法,那么在子类对象调用方法之后则调用到的是子类中的方法 如下代码所示:

1.调用子类继承父类中的方法: class Vecetables { public void Fot(string a,int b) { Console.WriteLine("我叫{0}是父类的第{1}个方法",a,b); } } class XC:Vecetables { } class Program { static void Main(string[] args) { Vecetables ve = new Vecetables();//父类的对象 XC xc = new XC();//子类的对象 ve.Fot("张三",1);//父类的方法 xc.Fot("李四",1);//子类的方法 Console.ReadLine(); } }

运行结果: 在这里插入图片描述

2.子类与父类有同名的方法:

如果子类与父类的方法同名,那么系统默认隐藏父类中的同名方法,实际调用之后使用的是子类自己的这个方法,但是会有警告,告诉我们应该使用new关键字专门进行隐藏,如下所示:

class Vecetables { public void Fot(string a,int b) { Console.WriteLine("我叫{0}是父类的第{1}个方法",a,b); } } class XC:Vecetables { public void Fot(string a, int b) { Console.WriteLine("我叫{0}是子类的第{1}个方法", a, b); } } class Program { static void Main(string[] args) { Vecetables ve = new Vecetables();//父类的对象 XC xc = new XC();//子类的对象 ve.Fot("张三",1);//父类的方法 xc.Fot("李四",1);//子类的方法 Console.ReadLine(); } }

系统提示: 在这里插入图片描述 运行结果: 在这里插入图片描述

3.对其继承的方法进行隐藏:

new关键字写于成员类型和名称之间,如下所示,则可以正常进行显示:

public new void Fot(string a, int b) { Console.WriteLine("我叫{0}是子类的第{1}个方法", a, b); }

在这里插入图片描述

三.重写的目的:

子类想放弃父类中的同名方法,在子类中声明一个新的方法逻辑,从而采用子类中的自己的方法,有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,有自己的方法逻辑,只不过是想用父类的这个方法的名字,这就需要采用方法的重写;

四.重写的规则:

1. 必须是在继承里; 2. 方法名、参数个数和参数类型 都必须相同; 3. 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类; 4. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected;

class Vecetables { public void Fot(string a,int b) { Console.WriteLine("我叫{0}是父类的第{1}个方法",a,b); } } class XC:Vecetables { protected new void Fot(string a, int b) { Console.WriteLine("我叫{0}是子类的第{1}个方法", a, b); } }

这样子类的方法不会被引用,相当于将父类中的方法执行了两次: 在这里插入图片描述 5. 声明为 static 的方法不能被重写,但是能够被再次声明;

class Vecetables { static void Fot(string a,int b) { Console.WriteLine("我叫{0}是父类的第{1}个方法",a,b); } } class XC:Vecetables { static void Fot(string a) { Console.WriteLine("我叫{0}是子类的方法", a); } }

程序会提示报错: 如此图所示

五.重写的前提以及好处:

既然知道了重写,那么在什么情况下进行重写又或者是重写的前提是什么呢?一起来探索下吧! 重写的前提:在进行重写时,父类中的这个方法必须是虚拟或者抽象; 重写的好处重写的好处在于子类可以根据需要,定义特定于自己独特的行为。,也就是说子类能够根据需要实现父类的方法,只是引用了父类方法的名字,但是有自己的行为,自己去实现一些方法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3