在 C# 中重写
C# 中的重写是在派生类中重新实现基类方法。在此,基类方法在子类中被重写。派生类方法与基类方法具有相同的名称和签名。重写对于实现运行时多态性很有用。
方法重写中使用了一些关键字。
1。 Virtual – 该关键字与基类一起使用,表示基类的方法可以被重写。
public virtual void Method() { // implementation }
2。 Override – 此关键字与派生类一起使用,表示派生类重写基类的方法。
public override void Method() { // implementation }
3。 Base – 该关键字在派生类中用于调用基类方法。
public override void Method() { base.Method(); // implementation }
C# 中的重写是如何工作的?
下面是我们如何在 C# 中实现重写的示例。
class Parent { public virtual void Demo() // base class { Console.WriteLine(“This is parent”); } } class Child: Parent { public override void Demo() // derived class { Console.WriteLine(“This is child”); } }
在上面的例子中有两个类,一个是基类或父类,另一个是派生类,或者我们可以说,子类。子类中派生出基类方法。在这种情况下,父类中的方法是虚拟的,这意味着它可以被子类覆盖。在子类中重写意味着该方法与具有相同方法签名的父类方法相同。
C# 中的重写类型
下面是显示使用各种关键字覆盖的示例。
示例 1 – 没有 Virtual 和 Override 关键字
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { class Bird // base class { public void fly() // base class method { Console.WriteLine("Birds are flying"); } } class Peacock : Bird // derived class { public new void fly() // derived class method { Console.WriteLine("Peacock is flying"); } } class Program { // main method static void Main(string[] args) { Bird b = new Peacock(); b.fly(); Console.ReadLine(); } } }
在上面的示例中,基类方法和派生方法均未使用关键字。
同样在main方法中,父引用用于调用子方法。因此,在这种情况下,当不使用关键字时,将调用父方法而不是子方法。所以输出将是
输出:
示例 2 (a)- 使用 Virtual 和 Override 关键字
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { class Bird // base class { public virtual void fly() // base class method { Console.WriteLine("Birds are flying"); } } class Peacock : Bird // derived class { public override void fly() // derived class method { Console.WriteLine("Peacock is flying"); } } class Program { // main method static void Main(string[] args) { Bird b = new Peacock(); b.fly(); Console.ReadLine(); } } }
在这个例子中,基类中使用了virtual,这意味着它赋予子类以自己的方式实现方法的权限。在派生类中,使用重写,这意味着子方法是重写方法。两种方法具有相同的名称和相同的方法签名,但实现部分不同。在此示例中,父引用也用于调用子方法。但由于父方法是虚拟的,因此首先调用子方法而不是父方法。所以输出将是
输出:
示例 2 (b) – Virtual 和 Override 关键字
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { class Bird // base class { public virtual void fly() // base class method { Console.WriteLine("Birds are flying"); } } class Peacock : Bird // derived class { public override void fly() // derived class method { Console.WriteLine("Peacock is flying"); } } class Program { //main method static void Main(string[] args) { Peacock p = new Peacock(); p.fly(); Console.ReadLine(); } } }
此示例与上一个示例相同,但此子方法仅供参考。
输出:
示例 3 – 使用基本关键字
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { class Bird // base class { public virtual void fly() // base class method { Console.WriteLine("Birds are flying"); } } class Peacock : Bird // derived class { public override void fly() // derived class method { base.fly(); // base is use to call parent method Console.WriteLine("Peacock is flying"); } } class Program { static void Main(string[] args) { Peacock p = new Peacock(); p.fly(); Console.ReadLine(); } } }
上面的例子中,在派生类中使用了基类来调用基类的方法。因此,在此基础方法中首先调用,然后调用派生方法。
输出:
示例 4 – 具有重写的抽象类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Overriding { abstract class Calculate { public abstract int sum(); } class Values : Calculate // derived class { int val1; int val2; public Values(int a = 0, int b = 0) { val1 = a; val2 = b; } public override int sum() { Console.WriteLine("sum of two values"); return (val1 + val2); } } class Program { static void Main(string[] args) { Values v = new Values(10, 20); int a = v.sum(); Console.WriteLine(a); Console.ReadLine(); } } }
在上面的例子中,使用了抽象方法。抽象类由包含抽象方法的派生类实现。
输出:
方法重写规则
- 派生类的方法签名应与基类相同。
- 在同一个类中不可能覆盖。
- 虚拟方法和重写方法的访问修饰符必须相同。
- virtual 关键字用于基类方法,Override 用于派生类方法。
- 基类方法不应该是静态的。
结论
重写在运行时多态性中很有用。它允许派生类以自己的方式实现基类方法。因此派生类与其基类的方法实现是不同的。重写的方法可以是虚拟的、重写的或抽象的。
以上是在 C# 中重写的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

使用 C# 的 Active Directory 指南。在这里,我们讨论 Active Directory 在 C# 中的介绍和工作原理以及语法和示例。

多线程和异步的区别在于,多线程同时执行多个线程,而异步在不阻塞当前线程的情况下执行操作。多线程用于计算密集型任务,而异步用于用户交互操作。多线程的优势是提高计算性能,异步的优势是不阻塞 UI 线程。选择多线程还是异步取决于任务性质:计算密集型任务使用多线程,与外部资源交互且需要保持 UI 响应的任务使用异步。

可以采用多种方法修改 XML 格式:使用文本编辑器(如 Notepad )进行手工编辑;使用在线或桌面 XML 格式化工具(如 XMLbeautifier)进行自动格式化;使用 XML 转换工具(如 XSLT)定义转换规则;或者使用编程语言(如 Python)进行解析和操作。修改时需谨慎,并备份原始文件。
