局部作用域变量遮蔽成员¶
ID: cs/local-shadows-member
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- maintainability
- readability
Query suites:
- csharp-security-and-quality.qls
在同一个类中,以一个现有成员的名字来命名局部变量或参数会造成混淆。这可能会导致对本应访问或赋值给对应成员的局部变量进行访问或赋值。
建议¶
为了清晰起见,最好重命名局部变量以避免遮蔽。
示例¶
在本例中,局部变量 title
遮蔽了同名的成员字段。这导致在赋值给 message
字符串时错误地引用了 title
。实际上应该引用 this.title
。
using System.Windows.Forms;
class Bad
{
private string title;
private string name;
public void DisplayDetails()
{
var title = "Person Details";
var message = "Title: " + title + "\nName: " + name;
MessageBox.Show(message, title);
}
}
示例¶
在修改后的示例中,局部变量已重命名为 boxTitle
,并且对 message
的赋值也相应地进行了更新。
using System.Windows.Forms;
class Good
{
private string title;
private string name;
public void DisplayDetails()
{
var boxTitle = "Person Details";
var message = "Title: " + title + "\nName: " + name;
MessageBox.Show(message, boxTitle);
}
}