我有一个抽象基类,它将用于数百个派生类,包括一个额外的抽象类。
至少有 2 个属性(我们称它们为目的和描述,都是字符串)将添加到许多(但不是全部)具体派生类中,因此我创建了接口(IPurposeful 和 IDescribable)以在需要时添加它们。到目前为止一切都很好。
我想要一个方法,我可以调用从我的基类派生的所有类,如果它确实是 IDescribable,它将验证和更新 Description 属性,或者如果它不是 IDescribable,则只返回 true。我想要另一种类似的方法来验证/更新目的属性。
我通过基类中的一个方法实现了这一点,它看起来像这样:
protected bool CheckDescription(bool modify = false)
{
if (this is IDescribable ele)
{
var newDesc = GetCorrectDescription();
UpdateDescription(newDesc, ele.Description, modify);
return newDesc.Equals(ele.Description);
}
else
{
return true;
}
}
SonarQube 将“这是 IDescribable”检查标记为阻止程序(不好的做法),我想知道为什么?我能想到的复制此功能的唯一其他方法是将基本方法更改为:
protected virtual bool CheckDescription(bool modify = false)
{
return true;
}
然后将这个完全相同的方法添加到可能的数百个派生类中:
protected override bool CheckDescription(bool modify = false)
{
var newDesc = GetCorrectDescription();
UpdateDescription(newDesc, Description, modify);
return newDesc.Equals(Description);
}
现在这似乎是不好的做法。
编辑:更改了 is/as 模式以消除冗余