C# 中的重写和隐藏有什么区别?
1.背景介绍
C# 是变成语言中的重要一员,它支持面向对象程序设计的主要特性,如封装、继承和多态。继承是面向对象程序设计中一个重要的概念,它允许派生类继承父类的属性和方法。在 C# 中,派生类可以通过重写或隐藏父类的属性和方法来对其进行个性化的定制化。
2.什么是重写?
重写是指在派生类中重新编写父类已有的属性或方法。当父类的方法或属性无法完全满足子类的需求时,子类可以通过重写来满足自己的特定需求。
2.1 重写的基本语法
C# 中的重写需要使用关键字“override”来修饰方法或属性。具体语法如下:
public class Animal
{
public virtual void Eat()
{
Console.WriteLine("Animal is eating.");
}
}
public class Cat : Animal
{
public override void Eat()
{
Console.WriteLine("Cat is eating fish.");
}
}
上面的代码中,Animal 和 Cat 都是类。Animal 类中有一个方法 Eat,使用关键字“virtual”来声明它是可以被重写的。Cat 类继承自 Animal 类,然后重写了 Eat 方法,使用关键字“override”来修饰。这样就实现了子类对父类方法的重写,并可以按照自己的需求重新定义方法的内容。
3.什么是隐藏?
隐藏是指在派生类中定义一个与父类同名的方法或属性。当子类需要重新定义一个与父类同名的方法或属性,但是不需要继承父类的方法或属性时,就需要使用方法和属性的隐藏。
3.1 隐藏的基本语法
C# 中的隐藏需要使用关键字“new”来修饰方法或属性。具体语法如下:
public class Animal
{
public void Eat()
{
Console.WriteLine("Animal is eating.");
}
}
public class Cat: Animal
{
public new void Eat()
{
Console.WriteLine("Cat is eating fish.");
}
}
上面的代码中,Animal 和 Cat 都是类。Animal 类中有一个方法 Eat,Cat 类继承自 Animal 类,然后重新定义了一个 Eat 方法,并且使用关键字“new”来修饰。这样就实现了子类对父类方法的隐藏,并可以按照自己的需求重新定义方法的内容。
4.重写和隐藏的区别
4.1 关键字不同
重写使用关键字“override”,而隐藏使用关键字“new”。
4.2 访问方式不同
重写允许子类调用父类的方法或属性,而隐藏不允许子类调用父类的方法或属性。
4.3 对象类型不同
当父类的方法或属性被重写时,对象的类型必须是子类,而当父类的方法或属性被隐藏时,对象的类型可以是父类或子类。
4.4 调用方式不同
当父类的方法或属性被重写时,调用子类对象的方法或属性时,实际调用的是子类所重写的方法或属性。而当父类的方法或属性被隐藏时,无论调用的是父类对象还是子类对象的方法或属性,实际调用的都是子类所隐藏的方法或属性。
4.5 报错方式不同
当父类的方法或属性被重写时,若子类中没有重写成功,编译器会提示错误信息;而当父类的方法或属性被隐藏时,编译器不会提示任何错误信息。
5.总结
本文主要介绍了 C# 中重写和隐藏的基本概念和语法,并重点比较了它们之间的区别。需要注意的是,重写和隐藏是面向对象编程中非常重要的概念,开发人员在项目开发中需要根据具体需求决定使用哪种方式。