C#如何使用Primary Constructors C# 12主构造函数详解
发布时间 - 2026-01-21 00:00:00 点击率:次C# 12 主构造函数将参数直接声明在类/结构体头部,简化参数捕获与初始化;语法为class C(p1, p2),参数默认为类型体内局部变量,需配合readonly字段、init属性等持久化使用。
C# 12 的主构造函数(Primary Constructors)不是“给类加一个新构造函数”,而是把构造参数直接声明在类/结构体头部,让参数自动成为类型定义的一部分——它简化了参数捕获、字段初始化和只读属性生成的样板代码。
主构造函数的基本写法
语法非常简洁:在类或结构体名称后紧跟括号,里面写参数列表。这些参数默认是 
readonly 字段、init 属性或 field 关键字来持久化使用。
- 类定义示例:
public class Person(string name, int age);—— 这行就完成了声明,无需再写显式构造函数 - 结构体同样支持:
public struct Point(double x, double y); - 参数可以带默认值:
class Config(string path, bool autoSave = true);
如何访问和使用主构造参数
主构造参数本身不能直接在外部访问,必须通过字段、属性或方法显式暴露。C# 12 提供了几种常用方式:
- 用
readonly字段捕获:class Person(string name, int age) { public readonly string Name = name; public readonly int Age = age; } - 用
init或get属性封装:public string Name { get; init; } = name;(注意:需在属性初始化器中引用name) - 用
field关键字自动生成私有后备字段:public string Name => _name; private readonly string _name = name;(需手动写,但field不是关键字,只是常见命名习惯) - 也可在方法或属性 getter 中直接使用参数名(只要没被遮蔽):
public override string ToString() => $"{name} ({age})";
主构造函数与基类构造调用
如果类继承自另一个类,主构造函数会自动尝试调用基类的无参构造函数。若基类没有无参构造,就必须显式指定调用哪个基类构造:
- 写法:
class Student(string name, int age) : Person(name, age + 1) { }—— 尾部的: Person(...)是基类构造调用 - 此时主构造参数
name和age可直接用于基类调用表达式中 - 不能同时存在主构造函数和显式的实例构造函数(除非你放弃主构造,改用传统写法)
注意事项和限制
主构造函数很轻量,但也有些容易踩的坑:
- 不支持
ref、out、params参数 - 不能和传统的实例构造函数共存(即不能既有
class C(int x),又写public C(int x) { ... }) - 静态构造函数、静态字段初始化不受影响,仍按原有规则执行
- 记录(record)类型本来就支持紧凑语法,主构造函数对
record class和record struct同样有效,且能自然融合with行为
基本上就这些。主构造函数不是银弹,但它让简单类型的定义更紧凑、意图更清晰,尤其适合 DTO、配置类、数据承载结构等场景。
# c#
# 作用域
# String
# 封装
# 构造函数
# 局部变量
# 结构体
# bool
# int
# double
# 继承
# class
# public
# private
# Struct
# 体内
# 不受
# 可在
# 但也
# 几种
# 不支持
# 可直接
# 但它
# 自动生成
# 有无
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在IIS管理器中快速创建并配置网站?
如何在万网自助建站中设置域名及备案?
如何用腾讯建站主机快速创建免费网站?
香港服务器租用每月最低只需15元?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
在Oracle关闭情况下如何修改spfile的参数
香港服务器租用费用高吗?如何避免常见误区?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何破解联通资金短缺导致的基站建设难题?
Android 常见的图片加载框架详细介绍
简单实现Android文件上传
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
b2c电商网站制作流程,b2c水平综合的电商平台?
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
怎么用AI帮你设计一套个性化的手机App图标?
,怎么在广州志愿者网站注册?
如何获取PHP WAP自助建站系统源码?
如何在万网主机上快速搭建网站?
Laravel storage目录权限问题_Laravel文件写入权限设置
利用vue写todolist单页应用
如何在阿里云虚拟主机上快速搭建个人网站?
如何在万网利用已有域名快速建站?
如何打造高效商业网站?建站目的决定转化率
轻松掌握MySQL函数中的last_insert_id()
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
教学论文网站制作软件有哪些,写论文用什么软件
?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何在阿里云部署织梦网站?
node.js报错:Cannot find module 'ejs'的解决办法
海南网站制作公司有哪些,海口网是哪家的?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel distinct去重查询_Laravel Eloquent去重方法
新三国志曹操传主线渭水交兵攻略
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
如何自定义建站之星网站的导航菜单样式?
如何用5美元大硬盘VPS安全高效搭建个人网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
如何快速搭建高效香港服务器网站?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何用花生壳三步快速搭建专属网站?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?

