在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`方法,这显示了方法隐藏的效果。