У меня есть абстрактный базовый класс, который будет использоваться в сотнях производных классов, включая дополнительный абстрактный класс.
Существует как минимум 2 свойства (назовем их Purpose и Description, обе строки), которые будутбыть добавленным ко многим (но не ко всем) конкретным производным классам, поэтому я создал интерфейсы (IPurposeful и IDescribable) для добавления их при необходимости.Пока все хорошо.
Мне нужен единственный метод, который я могу вызывать для всех классов, производных от моего базового класса, который будет проверять и обновлять свойство Description, если оно действительно IDescribable, или просто возвращать true, если оно есть.не может быть описанЯ хотел бы, чтобы другой подобный метод проверял / обновлял свойство Purpose.
Я добился этого с помощью метода в базовом классе, который выглядит примерно так:
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 для удаления избыточности