C# - 关键字使用 virtual+override 与 new

c++

1个回答

写回答

A.弥弥弥盖

2025-07-10 00:56

+ 关注

AI
AI

使用C#中的关键字virtual、override和new可以实现面向对象编程中的多态性和继承关系。本文将详细介绍这些关键字的使用,并提供案例代码加以说明。

virtual和override关键字

在C#中,关键字virtual用于声明一个方法、属性或索引器,以指示它可以被子类继承并重写。而关键字override则用于在子类中重写基类中已声明为虚拟的方法、属性或索引器。通过使用这两个关键字,我们可以创建具有不同实现的相似对象。

下面是一个使用virtual和override关键字的示例代码:

csharp

class Animal

{

public virtual void MakeSound()

{

Console.WriteLine("The animal makes a sound.");

}

}

class Dog : Animal

{

public override void MakeSound()

{

Console.WriteLine("The dog barks.");

}

}

class Cat : Animal

{

public override void MakeSound()

{

Console.WriteLine("The cat meows.");

}

}

class Program

{

static void MAIn(string[] args)

{

Animal animal = new Animal();

animal.MakeSound(); // 输出:The animal makes a sound.

Animal dog = new Dog();

dog.MakeSound(); // 输出:The dog barks.

Animal cat = new Cat();

cat.MakeSound(); // 输出:The cat meows.

}

}

在上面的代码中,Animal类中的MakeSound方法被声明为虚拟方法,可以被子类重写。Dog类和Cat类分别继承了Animal类,并重写了MakeSound方法。在MAIn方法中,我们分别创建了Animal、Dog和Cat类的实例,并调用它们的MakeSound方法。由于Dog和Cat类重写了MakeSound方法,因此它们的输出结果分别是"The dog barks."和"The cat meows."。

new关键字

与virtual和override关键字不同,new关键字用于在派生类中隐藏基类中的成员。通过使用new关键字,我们可以为派生类创建一个与基类成员同名的新成员,而不是重写基类成员。

下面是一个使用new关键字的示例代码:

csharp

class Animal

{

public void MakeSound()

{

Console.WriteLine("The animal makes a sound.");

}

}

class Dog : Animal

{

public new void MakeSound()

{

Console.WriteLine("The dog barks.");

}

}

class Cat : Animal

{

public new void MakeSound()

{

Console.WriteLine("The cat meows.");

}

}

class Program

{

static void MAIn(string[] args)

{

Animal animal = new Animal();

animal.MakeSound(); // 输出:The animal makes a sound.

Animal dog = new Dog();

dog.MakeSound(); // 输出:The animal makes a sound.

Animal cat = new Cat();

cat.MakeSound(); // 输出:The animal makes a sound.

}

}

在上面的代码中,Animal类中的MakeSound方法没有被声明为虚拟方法,因此不能被子类重写。Dog类和Cat类分别创建了一个与基类成员同名的新成员MakeSound,并使用new关键字隐藏了基类的MakeSound方法。在MAIn方法中,我们分别创建了Animal、Dog和Cat类的实例,并调用它们的MakeSound方法。由于使用了new关键字,调用派生类的MakeSound方法时实际上调用的是派生类中的新成员,而不是基类中的成员。

通过使用C#中的关键字virtual、override和new,我们可以实现面向对象编程中的多态性和继承关系。关键字virtual和override用于创建具有不同实现的相似对象,而关键字new用于在派生类中隐藏基类的成员。这些关键字在代码的重用性和可扩展性方面起到了重要作用。

在以上示例代码中,我们通过创建Animal、Dog和Cat类的实例,演示了这些关键字的使用。无论是通过重写虚拟方法还是隐藏基类成员,都可以根据具体需求来选择合适的方法。这些关键字为我们在面向对象编程中的设计和实现提供了更多的灵活性和扩展性。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号