面试题答案
一键面试原理
- 记录类型(Record)的不可变性:在C#中,记录类型默认创建不可变对象,其属性通常为init-only,意味着只能在对象初始化时赋值。
- 继承场景:子类继承父类记录类型时,要保持不可变性,需要遵循父类的不可变规则。这意味着子类不能改变父类已有的不可变属性的赋值方式,同时要确保自身新增的属性也遵循不可变原则。
- 扩展功能:子类可以通过新增init-only属性、重写虚方法或实现新的方法来扩展功能。
代码示例
// 父类记录类型
public record ParentRecord
{
public string Name { get; init; }
public ParentRecord(string name)
{
Name = name;
}
public virtual string GetInfo()
{
return $"Name: {Name}";
}
}
// 子类记录类型扩展功能
public record ChildRecord : ParentRecord
{
public int Age { get; init; }
public ChildRecord(string name, int age) : base(name)
{
Age = age;
}
public override string GetInfo()
{
return $"{base.GetInfo()}, Age: {Age}";
}
}
使用示例:
class Program
{
static void Main()
{
ChildRecord child = new ChildRecord("John", 30);
Console.WriteLine(child.GetInfo());
}
}
在上述代码中,ParentRecord
是父类记录类型,具有不可变的 Name
属性。ChildRecord
继承自 ParentRecord
,新增了不可变的 Age
属性,并通过重写 GetInfo
方法扩展了功能。在使用时,创建的 ChildRecord
对象保持了不可变性。