目录
如何在 C# 中使用重写?
1.虚拟关键字
2.覆盖关键字
结论
首页 后端开发 C#.Net教程 C# 中的方法重写

C# 中的方法重写

Sep 03, 2024 pm 03:13 PM
c# c# tutorial

方法重写是C#编程中常用的函数操作,需要利用派生类来重写基类中定义的操作。为了成功重写,该方法应为静态方法,基类和派生方法中的成员分类和访问修饰符应具有相同的类型,并且重写只能应用于派生类,而不能应用于基类。方法重写的其他名称是运行时多态性、动态多态性和后期绑定。

C# 中的方法重写

如何在 C# 中使用重写?

假设,我们的应用程序需要更改派生类中基类方法的行为,那么我们应该进行方法重写。为此,我们需要在派生类中创建与基类中具有相同签名的方法来执行不同的任务。  在我们学习如何使用覆盖技术之前,我们需要记住以下几点。

  • 在 C# 编程中,方法重写也称为运行时多态性、后期绑定或动态多态性。
  • 只有在派生类中才可以进行方法重写。因为在基类的派生类中重写了一个方法。
  • 该方法应该是用于重写的非虚拟或静态方法。
  • 重写方法和虚方法的访问级别修饰符应该相同。

被覆盖声明覆盖的方法称为覆盖基方法。这将出现在基类中。重写的基方法可以是抽象的、重写的或虚拟的。调用新的实现,重写方法继承自该基类。

我们使用不同的关键字来进行方法重写。他们是,

1.虚拟关键字

我们编译器在程序中遇到 virtual 关键字,它知道该方法可以被其任何派生类覆盖。结构如下。

public virtual int EnemyHealth()
{
Console.WriteLine("Enemy Health");
}
登录后复制

2.覆盖关键字

这存在于派生类中。它告诉编译器该方法正在重写基类中具有相同名称和签名的方法。

public override int EnemyHealth ()
{
Console.WriteLine("Enemy 1");
}
登录后复制

示例

首先,让我们看看不使用 Virtual 和 override 关键字的示例。

代码:

class Birds
{
public void Color( )
{
Console.WriteLine("Birds will have different Colors");
}
}
class Parrot:Birds
{
public void Color( )
{
Console.WriteLine("Parrot is Green");
}
}
class ExecutionClass
{
public static void Main( )
{
Birds object;
object = new Birds( );
object .Color( );
object = new Parrot( );
object.Color( );
}
}
登录后复制

输出:

C# 中的方法重写

在上面的示例中,我们创建了派生类 Parrot 的对象,并将其引用存储在 Birds 类型的引用变量对象中。

在下一步中,我们使用引用变量对象调用函数 Color ()。由于 object 包含对 Parrot 类型的对象的引用,因此我们很自然地希望执行 Parrot 类的函数 Color ()。但我们错了。美丽的编程不会允许这种事发生。

令我们惊讶的是,执行的是Birds类的Color()方法。这是因为该函数是根据引用的类型而不是引用变量对象所引用的内容来调用的。由于该对象是 Birds 类型的引用,因此无论对象引用谁,都会调用 Birds 类的 Color() 函数。

现在让我们用 virtual 和 override 重写相同的程序,这次我们将逐步进行以便更好地理解。

创建一个任意名称的基类。这里我使用的是 Birds。使用 virtual 关键字编写一个方法。这将是我们重写的方法,我们将在继承的类中重写它。在方法内部编写一些消息以在控制台中打印。

class Birds
{
public virtual void Color( )
{
Console.WriteLine("Birds will have different Colors");
}
}
登录后复制

现在再创建一个类 Parrot 这次我们将从之前创建的基类(即 Birds)继承它。为了继承,我们使用‘:’符号。

鹦鹉类:鸟类

这里写一个带有 override 关键字的函数并写一些消息。确保派生类中的方法名称和签名与基类中的方法名称和签名匹配。

public override void Color ( )
{
Console.WriteLine("Parrot is Green");
}
登录后复制

我们还需要一个类来执行检查重写的功能。创建一个具有任意名称的类。在里面写下Main函数。

class ExecutionClass
{
public static void Main( )
{
}
}
登录后复制

创建父类的对象,并使用该类的对象触发函数。这将调用 Birds 类中存在的 Color 方法。

Birds object;
object = new Birds( );
object .Color( );
登录后复制

现在创建派生类的对象并调用 Color 方法。这将调用 Parrot 类的 Color 方法。

object = new Parrot( );
object.Color( );
登录后复制

你能猜出我们运行程序时的输出吗?如下图所示。

输出:

C# 中的方法重写

关键字 override 和 virtual 允许在任何时间分别调用基类和派生类方法,即使方法名称和签名相同。

结论

在这篇文章中我们了解了方法重写、方法重写的必要性、重写原理的实际示例、实现方法、使用 virtual 和 override 关键字的必要性以及使用代码重写的示例。我们可以得出结论,重写是多态性中有用的功能之一,我们可以通过它更改派生类中基类方法的行为。

以上是C# 中的方法重写的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1668
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
使用 C# 的活动目录 使用 C# 的活动目录 Sep 03, 2024 pm 03:33 PM

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

C# 中的随机数生成器 C# 中的随机数生成器 Sep 03, 2024 pm 03:34 PM

C# 随机数生成器指南。在这里,我们讨论随机数生成器的工作原理、伪随机数和安全数的概念。

C# 数据网格视图 C# 数据网格视图 Sep 03, 2024 pm 03:32 PM

C# 数据网格视图指南。在这里,我们讨论如何从 SQL 数据库或 Excel 文件加载和导出数据网格视图的示例。

C# 中的阶乘 C# 中的阶乘 Sep 03, 2024 pm 03:34 PM

C# 阶乘指南。这里我们讨论 C# 中阶乘的介绍以及不同的示例和代码实现。

c#多线程和异步的区别 c#多线程和异步的区别 Apr 03, 2025 pm 02:57 PM

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

C# 中的模式 C# 中的模式 Sep 03, 2024 pm 03:33 PM

C# 模式指南。在这里,我们讨论 C# 中模式的介绍和前 3 种类型,以及其示例和代码实现。

C# 中的质数 C# 中的质数 Sep 03, 2024 pm 03:35 PM

C# 素数指南。这里我们讨论c#中素数的介绍和示例以及代码实现。

xml怎么改格式 xml怎么改格式 Apr 03, 2025 am 08:42 AM

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

See all articles