在C#中,阴影(shadowing)和重写(override)是两种不同的概念,分别用于处理字段和方法。下面详细解释它们的区别,并提供示例源代码。
阴影是指在派生类中声明一个与基类中的成员(通常是字段)同名的新成员,从而隐藏基类的成员。阴影使用new
关键字进行声明。
class BaseClass
{
public string Name = "Base Class";
}
class DerivedClass : BaseClass
{
public new string Name = "Derived Class";
}
class Program
{
static void Main()
{
DerivedClass derivedObj = new DerivedClass();
Console.WriteLine(derivedObj.Name); // 输出:Derived Class
Console.WriteLine(((BaseClass)derivedObj).Name); // 输出:Base Class
}
}
在上述例子中,DerivedClass
中的Name
字段阴影了BaseClass
中的同名字段。
重写是指在派生类中重新实现基类中的虚拟或抽象方法。使用override
关键字进行声明。
class BaseClass
{
public virtual void Display()
{
Console.WriteLine("Base Class");
}
}
class DerivedClass : BaseClass
{
public override void Display()
{
Console.WriteLine("Derived Class");
}
}
class Program
{
static void Main()
{
DerivedClass derivedObj = new DerivedClass();
derivedObj.Display(); // 输出:Derived Class
}
}
在上述例子中,DerivedClass
中的Display
方法重写了BaseClass
中的同名虚拟方法。
用途:
关键字:
new
关键字。override
关键字。影响继承链:
在实际应用中,应根据情况选择阴影或重写,确保理解它们的用途和影响。