MST

星途 面试题库

面试题:C#中类的继承与多态相关问题

请阐述C#中类继承的语法和特点,以及虚方法(virtual method)和重写(override)在实现多态性中的作用,并通过代码示例展示如何在继承体系中正确运用虚方法和重写来实现运行时多态。
48.7万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

C# 中类继承的语法和特点

  1. 语法:在 C# 中,使用 : 符号来表示一个类继承自另一个类。例如:
class ParentClass
{
    // 父类成员
}

class ChildClass : ParentClass
{
    // 子类成员,可包含新成员或重写父类成员
}
  1. 特点
    • 代码复用:子类可以继承父类的非私有成员,从而避免重复编写相同的代码。
    • 层次结构:形成一种层次结构,子类拥有父类的特性,并可以在此基础上进行扩展。
    • 单一继承:C# 中类只支持单一继承,即一个子类只能有一个直接父类,这有助于避免多重继承带来的复杂性和菱形继承问题。

虚方法(virtual method)和重写(override)在实现多态性中的作用

  1. 虚方法:在父类中使用 virtual 关键字修饰的方法,表明该方法可以在子类中被重写。虚方法为子类提供了一种在保持方法签名一致的情况下,改变方法实现的机制。
  2. 重写:子类使用 override 关键字来重写父类的虚方法。通过重写,子类可以提供适合自身需求的具体实现,从而实现多态性。多态性允许在运行时根据对象的实际类型来决定调用哪个版本的方法,而不是在编译时就确定。

代码示例展示如何在继承体系中正确运用虚方法和重写来实现运行时多态

using System;

class Shape
{
    // 虚方法
    public virtual void Draw()
    {
        Console.WriteLine("绘制一个形状");
    }
}

class Circle : Shape
{
    // 重写虚方法
    public override void Draw()
    {
        Console.WriteLine("绘制一个圆形");
    }
}

class Rectangle : Shape
{
    // 重写虚方法
    public override void Draw()
    {
        Console.WriteLine("绘制一个矩形");
    }
}

class Program
{
    static void Main()
    {
        Shape[] shapes = new Shape[] { new Circle(), new Rectangle() };
        foreach (Shape shape in shapes)
        {
            shape.Draw();
        }
    }
}

在上述代码中:

  1. Shape 类定义了一个虚方法 Draw
  2. CircleRectangle 类继承自 Shape 类,并分别重写了 Draw 方法,提供了各自的实现。
  3. Main 方法中,创建了一个 Shape 类型的数组,数组元素实际是 CircleRectangle 类型的对象。当遍历数组并调用 Draw 方法时,根据对象的实际类型(运行时确定),调用相应子类重写后的 Draw 方法,从而实现了运行时多态。