重写父类属性
- 语法:
- 父类中属性需标记为
virtual
。
- 子类使用
override
关键字重写该属性。
- 示例:
public class ParentClass
{
public virtual string Name { get; set; } = "Parent";
}
public class ChildClass : ParentClass
{
public override string Name { get; set; } = "Child";
}
- 运行机制:运行时,根据对象的实际类型决定调用哪个版本的属性。如果是
ChildClass
的实例,会调用 ChildClass
中重写后的 Name
属性。
隐藏父类属性
- 语法:
- 父类属性无需特殊修饰(非
virtual
)。
- 子类使用
new
关键字隐藏父类属性。
- 示例:
public class ParentClass
{
public string Name { get; set; } = "Parent";
}
public class ChildClass : ParentClass
{
public new string Name { get; set; } = "Child";
}
- 运行机制:编译时,根据变量的声明类型决定调用哪个版本的属性。如果声明为
ParentClass
类型,即使实际是 ChildClass
实例,也会调用 ParentClass
的 Name
属性;若声明为 ChildClass
类型,则调用 ChildClass
中隐藏后的 Name
属性。
重写和隐藏的区别
- 语法区别:重写要求父类属性为
virtual
,子类用 override
;隐藏父类属性无特殊修饰,子类用 new
。
- 运行机制区别:重写基于对象实际类型动态绑定,隐藏基于变量声明类型静态绑定。