C#虚方法的声明和使用实例教程
在C#中,如果子类需要重写父类中的方法,可以使用虚方法。虚方法就是一个可以在子类中重写的方法,子类可以继承这个方法并用自己的实现代替父类中的实现。
声明虚方法
使用关键字virtual
来声明一个虚方法。虚方法的声明格式为:
访问修饰符 virtual 返回值类型 方法名 (参数列表) {
// 方法体
}
例如:
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing shape...");
}
}
在上述代码中,Shape
类中有一个虚方法Draw()
,可以在子类中重写。
使用实例
下面是一个圆形类Circle
,其继承自Shape
,并重写了Draw()
方法:
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle...");
}
}
可以看到,子类Circle
重写了父类Shape
的Draw()
方法,并用自己的实现代替了父类中的实现。调用Draw()
方法时,将会调用子类中的实现。
还可以在子类中调用父类的虚方法。在子类中用base
关键字来调用父类的虚方法。下面是一个矩形类Rectangle
的例子:
public class Rectangle : Shape
{
public override void Draw()
{
base.Draw(); // 调用父类的 Draw() 方法
Console.WriteLine("Drawing a rectangle...");
}
}
可以看到,在Rectangle
类的Draw()
方法中,使用了base
关键字调用了父类中的Draw()
方法,并在其基础上添加了矩形的绘制。
示例说明
例1:汽车类和代理商类
public class Car
{
public virtual string GetBrand()
{
return "Generic Car Brand";
}
}
public class Toyota : Car
{
public override string GetBrand()
{
return "Toyota";
}
}
public class CarDealer
{
private Car car;
public CarDealer(Car car)
{
this.car = car;
}
public string GetBrand()
{
return this.car.GetBrand();
}
}
在上述代码中,创建了一个Car
类,并在其中声明了一个虚方法GetBrand()
,返回一个汽车的品牌名称。然后创建了一个名为Toyota
的子类,并在其中重写了父类中的GetBrand()
方法,返回该子类所对应的品牌名称。
接下来创建了一个代理商类CarDealer
,其在构造函数中接收一个Car
类的参数,并保存到一个私有的car
字段中。CarDealer
类中有一个公共的GetBrand()
方法,该方法调用car
对象的GetBrand()
方法,获取其所对应汽车品牌名称,并返回。
例2:多态性实现
public class Animal
{
public virtual string MakeSound()
{
return "Generic animal sound";
}
}
public class Dog : Animal
{
public override string MakeSound()
{
return "Bark";
}
}
public class Cat : Animal
{
public override string MakeSound()
{
return "Meow";
}
}
public class AnimalFarm
{
private List<Animal> animals;
public AnimalFarm()
{
this.animals = new List<Animal>();
this.animals.Add(new Dog());
this.animals.Add(new Cat());
this.animals.Add(new Animal());
}
public void MakeSounds()
{
foreach (Animal animal in this.animals)
{
Console.WriteLine(animal.MakeSound());
}
}
}
在上述代码中,创建了一个Animal
类,并在其中声明了一个虚方法MakeSound()
,返回动物发出的声音。然后创建了一个Dog
子类和一个Cat
子类,两个子类中分别重写了父类的MakeSound()
方法,返回各自的声音。
接下来创建了一个名为AnimalFarm
的类,该类持有一些Animal
类型的对象组成的列表。在其构造函数中,实例化一个Dog
类、一个Cat
类以及一个Animal
类,分别添加到列表中。AnimalFarm
类中还有一个MakeSounds()
方法,遍历列表中的各个Animal
对象,分别调用其MakingSound()
方法,输出各自的声音。
在应用程序中实例化一个AnimalFarm
对象后,调用其MakeSounds()
方法,会输出各种不同动物的声音,体现了多态性的实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#虚方法的声明和使用实例教程 - Python技术站