コードインスペクション:キャプチャされたプライマリコンストラクターパラメーターは変更可能
非レコード型のプライマリコンストラクターを使うことで、型定義をよりコンパクトにできます。 しかし、その一方で、インスタンスメンバーの本体内でプライマリコンストラクターパラメーターを「キャプチャ」するという潜在的な問題が生じます。 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();
}
2026 年 6 月 12 日