0

0

C# 主构造函数方法 C# 12 Class如何使用Primary Constructors

月夜之吻

月夜之吻

发布时间:2026-03-05 12:06:12

|

573人浏览过

|

来源于php中文网

原创

c# 12 的主构造函数是在 class 或 struct 声明行后直接写括号参数的语法糖,自动生成 private readonly 字段(或 public get-only 属性),不新增关键字,需显式调用、不支持 ref/out/params,不可用于 record 或 partial 类。

c# 主构造函数方法 c# 12 class如何使用primary constructors

什么是 C# 12 的主构造函数(Primary Constructor)

它不是新增一个叫 PrimaryConstructor 的关键字或特性,而是 C# 12 允许你在 classstruct 声明行后直接写括号参数,从而隐式定义一个构造函数并自动捕获参数为 private readonly 字段(或可选地提升为属性)。它本质是语法糖,编译后仍生成常规构造函数和字段。

怎么写一个带主构造函数的 class

把参数直接写在类名后面,用括号包裹;参数会默认成为私有只读字段,名称与参数名一致(注意大小写)。

public class Person(string name, int age)
{
    // name 和 age 已自动作为 private readonly 字段存在
    public string Name => name;
    public int Age => age;
}
  • 不能在主构造函数参数列表中使用 refoutparams 或可空引用类型标注(如 string?)——但可以写 string,其可空性由上下文推断
  • 若需公开属性,必须显式定义(如上例),主构造参数本身不自动暴露为 public 属性
  • 若想让某个参数变成 public auto-property,可用 public 修饰符: public class Person(public string Name, int age) ——此时 Name 会生成 public get-only 自动属性,且不再作为私有字段存在

主构造函数和常规构造函数能共存吗

可以,但必须显式调用主构造函数(通过 this(...)),否则编译报错:CS9148: Primary constructor must be invoked by all other constructors

卡拉OK视频制作
卡拉OK视频制作

卡拉OK视频制作,在几分钟内制作出你的卡拉OK视频

下载
public class Order(decimal total, string currency) : ICloneable
{
    public Order(decimal total) : this(total, "USD") { } // ✅ 正确:调用主构造
<pre class="brush:php;toolbar:false;"><code>public object Clone() => new Order(total, currency);

}

  • 所有额外定义的构造函数(包括无参构造)都必须以 this(...) 开头,且只能调用一次
  • 不能在主构造函数里写方法体(比如加日志、校验),它没有函数体;校验逻辑得放在其他构造函数或初始化器里
  • 若需要参数校验,常见做法是定义一个私有构造函数做验证,再让主构造函数委托给它(反过来不行,因为主构造必须最先被调)

主构造函数对继承和泛型的影响

主构造参数不会自动参与基类构造调用;子类若要传递参数给父类主构造,必须显式用 : base(...)。泛型约束也需单独声明,不继承自主构造参数类型。

public class Animal<T>(T id) where T : notnull
{
    public T Id => id;
}
<p>public class Dog(string name, int age) : Animal<string>(name) // ✅ 显式传参给基类主构造
{
public string Name => name;
}
  • 主构造函数不改变类的继承规则,但容易让人误以为参数“自动向上透传”,实际必须手动写 : base(...)
  • 泛型参数若来自主构造,需在类声明处重复声明(如 class C<t>(T value)</t>),不能省略 <t></t>
  • 主构造函数不可用于 record(因为 record 已有自己的紧凑语法),也不支持 partial 类跨文件拆分主构造参数定义

主构造函数看着简洁,但字段生命周期、访问控制、继承链中的参数流转这些地方很容易漏掉显式声明,尤其从老版本迁移时,别假设参数会“自动变 public”或“自动传给基类”。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

930

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

930

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

930

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

930

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

602

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

294

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

212

2025.08.29

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

768

2024.01.03

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

33

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.7万人学习

C 教程
C 教程

共75课时 | 5.2万人学习

C++教程
C++教程

共115课时 | 20.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号