字段掩盖了超类中的字段¶
ID: cs/field-masks-base-field
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- reliability
- readability
- naming
Query suites:
- csharp-security-and-quality.qls
此规则识别隐藏超类中字段的字段,因为该字段具有相同的名称,此外,子类中没有方法使用 super.field
直接引用超类中的字段。在子类中重新定义字段是一个常见错误。
建议¶
检查该字段是否确实应该在子类中重新定义。如果应该重新定义,请考虑更改其名称,以更清楚地说明该字段的作用。
示例¶
在此示例中,Employee 中的“name”属性掩盖了 Person 中的“name”属性。这可能不是预期的结果。
class Person
{
private string name;
public Person() { }
public Person(string name)
{
this.name = name;
}
}
class Employee : Person
{
private string name; // BAD
private string department;
public Employee(string name, string department)
{
this.name = name;
this.department = department;
}
}
参考¶
MSDN,C# 编程指南,通过继承隐藏。