MST

星途 面试题库

面试题:C#属性(Property)的重写与隐藏

在C#中,当子类继承父类时,如何正确重写或隐藏父类的属性?请举例说明,并阐述重写和隐藏在语法和运行机制上的区别。
42.5万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

重写父类属性

  1. 语法
    • 父类中属性需标记为 virtual
    • 子类使用 override 关键字重写该属性。
  2. 示例
public class ParentClass
{
    public virtual string Name { get; set; } = "Parent";
}

public class ChildClass : ParentClass
{
    public override string Name { get; set; } = "Child";
}
  1. 运行机制:运行时,根据对象的实际类型决定调用哪个版本的属性。如果是 ChildClass 的实例,会调用 ChildClass 中重写后的 Name 属性。

隐藏父类属性

  1. 语法
    • 父类属性无需特殊修饰(非 virtual)。
    • 子类使用 new 关键字隐藏父类属性。
  2. 示例
public class ParentClass
{
    public string Name { get; set; } = "Parent";
}

public class ChildClass : ParentClass
{
    public new string Name { get; set; } = "Child";
}
  1. 运行机制:编译时,根据变量的声明类型决定调用哪个版本的属性。如果声明为 ParentClass 类型,即使实际是 ChildClass 实例,也会调用 ParentClassName 属性;若声明为 ChildClass 类型,则调用 ChildClass 中隐藏后的 Name 属性。

重写和隐藏的区别

  1. 语法区别:重写要求父类属性为 virtual,子类用 override;隐藏父类属性无特殊修饰,子类用 new
  2. 运行机制区别:重写基于对象实际类型动态绑定,隐藏基于变量声明类型静态绑定。