C#是一种面向对象的编程语言,在继承中,子类可以继承基类中的成员,包括属性、方法和事件等,同时可以对已继承的成员进行重写和隐藏。下面将详细讲解C#子类对基类方法的继承、重写与隐藏,包括如何使用继承、重写和隐藏,以及它们之间的区别和联系。
继承
使用继承可以使子类获得基类中的所有非私有成员(包括属性、方法、事件等),并且在不修改基类的情况下可以扩展基类的功能。在C#中,使用冒号后跟基类名来实现继承,如:
class Animal
{
public void Eat()
{
Console.WriteLine("Animal is eating.");
}
}
class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Dog is barking.");
}
}
在上面的示例中,类Dog继承了类Animal,并且增加了独有的方法Bark()。由于Dog继承了Animal,所以可以在Dog中访问Animal的成员,如:
Dog dog = new Dog();
dog.Eat(); // 输出 "Animal is eating."
重写
重写是指子类对基类中已有的(非私有)虚方法进行重新定义。在C#中,使用override
关键字来实现重写,如:
class Animal
{
public virtual void Eat()
{
Console.WriteLine("Animal is eating.");
}
}
class Dog : Animal
{
public override void Eat()
{
Console.WriteLine("Dog is eating.");
}
}
在上面的示例中,类Dog重写了类Animal中的虚方法Eat()。由于Eat()是虚方法,并且Dog重写了它,所以在执行时,如果通过Dog类来调用Eat()方法,则会执行Dog类中的Eat()方法,如:
Dog dog = new Dog();
dog.Eat(); // 输出 "Dog is eating."
注意,重写方法必须具有与被重写方法相同的签名,否则会报编译错误。同时,重写方法的访问修饰符应该和被重写方法的访问修饰符相同或更宽松。
隐藏
隐藏是指子类对基类中已有的(非私有)非虚方法进行重新定义,并且在子类中使用新方法屏蔽掉基类中的原方法。在C#中,使用new
关键字来实现隐藏,如:
class Animal
{
public void Eat()
{
Console.WriteLine("Animal is eating.");
}
}
class Dog : Animal
{
public new void Eat()
{
Console.WriteLine("Dog is eating.");
}
}
在上面的示例中,类Dog隐藏了类Animal中的成员Eat()。由于Eat()是非虚方法,并且Dog隐藏了它,所以在执行时,如果通过Dog类来调用Eat()方法,则会执行Dog类中的Eat()方法,如:
Dog dog = new Dog();
dog.Eat(); // 输出 "Dog is eating."
需要注意的是,由于隐藏方法不再调用基类中的方法,因此没有办法直接通过子类对象来调用被隐藏的方法。如果需要使用基类中被隐藏的方法,可以在子类中使用基类的实例来访问它。
Dog dog = new Dog();
((Animal)dog).Eat(); // 输出 "Animal is eating."
总结
继承、重写和隐藏是C#中面向对象编程的重要概念。在子类中使用继承可以获得基类中的所有成员,扩展基类的功能;重写可以修改基类中的虚方法,实现多态;隐藏可以屏蔽掉基类中的非虚成员,并提供新的实现。
上面的代码示例展示了如何使用继承、重写和隐藏,以及它们之间的区别和联系。在实际编程中,通过合理使用继承、重写和隐藏,可以提高代码的可复用性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#子类对基类方法的继承、重写与隐藏详解 - Python技术站