代码检查:捕获的主构造函数参数是可变的
非记录类型的主构造函数使您的类型定义更加简洁。 然而,缺点是,它们引入了一个潜在问题,即在实例成员主体中“捕获”主构造函数参数。 C# 中的所有参数变量都是可变的,这意味着任何实例成员都可以在初始化后更改其值,并且没有语法可以强制参数为只读。
此检查会报告“捕获”的主构造函数参数实际上被成员修改的情况。
快速修复通过引入一个普通的可变字段,帮助明确表达可变的类级状态。
class Service(IDependency dependency)
{
public void DoWork() => dependency.Use();
public void SetupHack()
{
dependency = new AdhocDependencyImpl(); // Warning
DoWork();
}
}
interface IDependency
{
void Use();
}
class AdhocDependencyImpl : IDependency
{
public void Use() => throw new NotImplementedException();
}
class Service(IDependency dependency)
{
private IDependency _dependency = dependency;
public void DoWork() => _dependency.Use();
public void SetupHack()
{
_dependency = new AdhocDependencyImpl();
DoWork();
}
}
interface IDependency
{
void Use();
}
class AdhocDependencyImpl : IDependency
{
public void Use() => throw new NotImplementedException();
}
最后修改日期: 2025年 9月 27日