方法重写是C#编程中常用的函数操作,需要利用派生类来重写基类中定义的操作。为了成功重写,该方法应为静态方法,基类和派生方法中的成员分类和访问修饰符应具有相同的类型,并且重写只能应用于派生类,而不能应用于基类。方法重写的其他名称是运行时多态性、动态多态性和后期绑定。
假设,我们的应用程序需要更改派生类中基类方法的行为,那么我们应该进行方法重写。为此,我们需要在派生类中创建与基类中具有相同签名的方法来执行不同的任务。 在我们学习如何使用覆盖技术之前,我们需要记住以下几点。
被覆盖声明覆盖的方法称为覆盖基方法。这将出现在基类中。重写的基方法可以是抽象的、重写的或虚拟的。调用新的实现,重写方法继承自该基类。
我们使用不同的关键字来进行方法重写。他们是,
我们编译器在程序中遇到 virtual 关键字,它知道该方法可以被其任何派生类覆盖。结构如下。
public virtual int EnemyHealth() { Console.WriteLine("Enemy Health"); }
这存在于派生类中。它告诉编译器该方法正在重写基类中具有相同名称和签名的方法。
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( ); } }
输出:
在上面的示例中,我们创建了派生类 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( );
你能猜出我们运行程序时的输出吗?如下图所示。
输出:
关键字 override 和 virtual 允许在任何时间分别调用基类和派生类方法,即使方法名称和签名相同。
在这篇文章中我们了解了方法重写、方法重写的必要性、重写原理的实际示例、实现方法、使用 virtual 和 override 关键字的必要性以及使用代码重写的示例。我们可以得出结论,重写是多态性中有用的功能之一,我们可以通过它更改派生类中基类方法的行为。
以上是C# 中的方法重写的详细内容。更多信息请关注PHP中文网其他相关文章!