c#方法重载和方法重写和方法隐藏
1. 方法重载(Method Overloading)
方法重载允许在同一个类中定义多个同名方法,但这些方法的参数列表必须不同(参数的数量、类型或顺序至少有一个不同)。
class MathOperations
{
public int Add(int a, int b)
{
return a + b;
}
public double Add(double a, double b)
{
return a + b;
}
}
2. 方法重写(Method Overriding)
方法重写发生在派生类中,允许派生类提供一个特定于其自身的方法实现,该方法与基类中的方法具有相同的签名。使用override关键字来标记重写的方法,并用virtual或abstract关键字标记基类中的方法。
class BaseClass
{
public virtual void Display()
{
Console.WriteLine("Base class method");
}
}
class DerivedClass : BaseClass
{
public override void Display()
{
Console.WriteLine("Derived class method");
}
}
3. 方法隐藏(Method Hiding)
方法隐藏也发生在派生类中,但不是基于继承的规则,而是通过在派生类中定义一个与基类中同名的方法来实现的 (使用new关键字隐藏基类中的方法)。隐藏的方法在基类中不是virtual或abstract的。当调用隐藏的方法时,总是调用派生类中的版本,即使是通过基类引用来调用。
class BaseClass
{
public void Show()
{
Console.WriteLine("Base class method");
}
}
class DerivedClass : BaseClass
{
new public void Show() // 使用new关键字隐藏基类中的方法
{
Console.WriteLine("Derived class method");
}
}
**
4. 总结:
**
方法重载:在同一类中定义多个同名方法,参数列表不同。
方法重写:在派生类中提供基类中方法的特定实现,使用override关键字。适用于基于继承的场景。
方法隐藏:在派生类中定义一个与基类中同名的方法,但不使用override关键字。适用于完全不希望基类的该方法在派生类中被调用的情况。通常不推荐使用,因为它可能导致代码难以理解和维护。更好的选择是通过方法重写来实现多态性。
•