如何在C#的record类型中创建多个构造函数?
C# record类型添加多构造函数的实现方法
实现方式1:保留原位置声明的主构造函数
你定义的是位置式record,所有自定义构造函数必须链式调用自动生成的主构造函数,传入对应参数的默认值即可实现无参构造:
public record Person(int Id, string FirstName, string LastName) { // 自定义无参构造,调用主构造传入默认值 public Person() : this(default, string.Empty, string.Empty) { // 此处可添加额外初始化逻辑 } }
这种写法下,位置声明的Id、FirstName、LastName属性默认是init-only的,仅能在构造阶段赋值,符合record的不可变设计。
实现方式2:和普通class一致的显式属性声明
如果需要属性支持后续修改,不需要默认的不可变特性,可以放弃位置式主构造的写法,和你写普通class的逻辑完全一致:
public record Person { public int Id { get; set; } public string FirstName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty; public Person() { } public Person(int id, string firstName, string lastName) { Id = id; FirstName = firstName; LastName = lastName; } }
补充说明
你可以根据业务需求选择对应写法,两种写法都支持任意数量的构造函数重载,只要保证自定义构造最终都会调用到已定义的合法构造即可。
内容的提问来源于stack exchange,提问作者Nadar
相关产品推荐
相关产品推荐

