You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#12主构造函数初始化普通类

C#12主构造函数转换AutoHttpClient的说明

原代码逻辑

原代码是无参构造实现,类内部自行实例化HttpClient,属于类自主管理依赖的场景。

疑惑代码的问题

你写的这段代码:

internal class AutoHttpClient(HttpClient httpClient) : IAutoHttpClient
{
}

是依赖注入场景的标准主构造写法,但和原代码的逻辑完全不同:

  • 原代码:类自己创建并持有HttpClient实例
  • 疑惑代码:要求外部传入HttpClient实例,依赖由外部(比如DI容器)负责创建和注入

匹配原代码逻辑的主构造写法

如果要保留原代码“自行初始化HttpClient”的逻辑,用C#12语法可以简化为:

internal class AutoHttpClient : IAutoHttpClient
{
    private readonly HttpClient httpClient = new HttpClient();
}

要是一定要显式用无参主构造(其实可以省略),写法如下:

internal class AutoHttpClient() : IAutoHttpClient
{
    private readonly HttpClient httpClient = new HttpClient();
}

主构造函数的核心适用场景

  • 当类需要外部提供依赖时(比如依赖注入),带参数的主构造是最优写法,你的疑惑代码本身是这种场景的正确实现,只是和原代码逻辑不匹配
  • 当类自主管理内部依赖时,直接初始化字段比主构造更简洁,没必要强行用主构造

内容的提问来源于stack exchange,提问作者tase akpo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:24:51