C#是否支持在构造函数参数中声明并赋值字段的语法糖?
问题描述
我试图回忆一个C#语言特性,但有段时间没接触C#了,记不清确切语法也找不到相关文档。该特性是一种简写语法,可在构造函数参数中声明字段或属性,并在同一语句中将构造函数参数赋值给该字段。我记得是在.NET Core Azure Functions依赖注入场景中使用的,不确定是否特定于.NET Core、Azure或依赖注入框架。
我印象中的写法类似:
class MyClass { public MyClass(private IMyDependency thingy = null) { ... } }
这段代码等价于:
class MyClass { private readonly IMyDependency _thingy; public MyClass(IMyDependency thingy) { this._thingy = thingy; } }
请问该特性是否真实存在?是否已被移除?还是我记错了?若真实存在,其语法是什么,名称是什么?
解答
这个特性真实存在,它是**C# 12引入的主构造函数(Primary Constructors)**扩展特性(C# 9时仅支持record类型,C# 12将其扩展到普通类和结构体)。
你记忆中的语法有误,正确的写法是直接在类声明后定义主构造函数参数,并通过访问修饰符指定生成的字段/属性的可见性,示例如下:
class MyClass(private IMyDependency thingy) { // 可直接使用thingy,编译器会自动生成private readonly字段并完成赋值 }
这段代码完全等价于你给出的传统手写字段+构造函数赋值的写法。
该特性并未被移除,属于C# 12及以后版本的正式语言特性,和.NET Core、Azure Functions或依赖注入框架无关——不过在依赖注入场景中它确实被广泛使用,因为能大幅简化依赖注入的构造函数代码。
内容的提问来源于stack exchange,提问作者I V
相关产品推荐
相关产品推荐

