c#方法重写和隐藏的学习示例


在C#中,方法重写(Override)和隐藏(New)是面向对象编程中常见的概念,它们都与继承有关,但行为有所不同。下面我将为你提供一个简单的示例,来展示这两种情况。

### 方法重写(Override)

方法重写发生在子类中,用于改变从父类继承的方法的行为。为了重写父类的方法,子类中的方法需要使用`override`关键字,并且父类中的方法必须是`virtual`的(或者在C# 6.0及以上版本中,可以是`abstract`或`interface`中的方法)。


using System;

class BaseClass
{
    public virtual void Show()
    {
        Console.WriteLine("这是基类的方法");
    }
}

class DerivedClass : BaseClass
{
    // 使用override关键字重写基类的方法
    public override void Show()
    {
        Console.WriteLine("这是派生类重写的方法");
    }
}

class Program
{
    static void Main(string[] args)
    {
        DerivedClass derived = new DerivedClass();
        derived.Show(); // 输出: 这是派生类重写的方法
    }
}

### 方法隐藏(New)

方法隐藏发生在子类中,当子类定义了与父类中同名的非静态方法时(不考虑参数列表),并且没有使用`override`关键字。这样,子类的方法会隐藏掉父类中的同名方法。


using System;

class BaseClass
{
    public void Show()
    {
        Console.WriteLine("这是基类的方法");
    }
}

class DerivedClass : BaseClass
{
    // 不使用override关键字,隐藏基类的方法
    public new void Show()
    {
        Console.WriteLine("这是派生类隐藏的方法");
    }
}

class Program
{
    static void Main(string[] args)
    {
        DerivedClass derived = new DerivedClass();
        derived.Show(); // 输出: 这是派生类隐藏的方法

        // 如果你想调用基类的Show方法,你需要将对象视为基类类型
        BaseClass baseObj = derived;
        baseObj.Show(); // 输出: 这是基类的方法
    }
}

在上面的例子中,`DerivedClass`中的`Show`方法隐藏了`BaseClass`中的`Show`方法。但是,如果我们将`DerivedClass`的实例视为`BaseClass`类型,那么调用的将是基类中的`Show`方法,这显示了方法隐藏的效果。