深入C#:探讨阴影与重写,优雅处理字段和方法的差异

作者:微信公众号:【架构师老卢】
12-25 18:42
47

概述:在C#中,阴影(shadowing)和重写(override)是处理字段和方法的两种不同机制。阴影用于隐藏基类成员,而重写用于重新实现基类的虚拟或抽象方法。

在C#中,阴影(shadowing)和重写(override)是两种不同的概念,分别用于处理字段和方法。下面详细解释它们的区别,并提供示例源代码。

阴影(Shadowing):

阴影是指在派生类中声明一个与基类中的成员(通常是字段)同名的新成员,从而隐藏基类的成员。阴影使用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):

重写是指在派生类中重新实现基类中的虚拟或抽象方法。使用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中的同名虚拟方法。

区别:

  1. 用途:

    • 阴影主要用于隐藏基类中的成员,不关心是否是虚拟方法。
    • 重写主要用于实现基类中的虚拟或抽象方法,提供对派生类的自定义实现。
  2. 关键字:

    • 阴影使用new关键字。
    • 重写使用override关键字。
  3. 影响继承链:

    • 阴影不影响基类成员的继承链,只是在当前类中隐藏了基类的同名成员。
    • 重写影响继承链,派生类的实例通过基类引用调用时,会调用派生类中重写的方法。

在实际应用中,应根据情况选择阴影或重写,确保理解它们的用途和影响。

阅读排行