У меня следующая ситуация:Почему это не нормально, чтобы использовать интерфейс в этом случае
interface IBaseReader{
string Header {get; set;}
string CurrentRow {get; set;}}
class BaseReader: IBaseReader{
......}
interface ICustomReader{
string Header {get; set;}
string Delimiter {get; set;}}
class CustomReader :BaseReader, ICustomReader{
......}
В классе файл обрабатывающий Я использую этот ICustomReader знать, если полученный экземпляр из BaseReader является ICustomReader и если это, чем я знайте, что он содержит разделитель, и я могу его проверить.
IBaseReader _reader;
if(_reader is ICustomReader)
{
var items = (_reader as ICustomReader).Header.Split((_reader as ICustomReader).Delimiter);
//split the current row and header by delimiter and check if it is ok
}
Мои друзья говорят, что его не нормально, чтобы написать такой код, потому что мы проверяем, если экземпляр, который в настоящее время представлен в виде IBaseReader является ICustomReaderthat появляется в производном классе, и это означает, что базовый класс должен знать кое-что о производном классе. Я генерал Мы разработали лучшее решение для этого. Но мне просто интересно, что именно он ломается и что будет правильным решением в этом случае, если мы просто не можем переместить свойство между классами?
Спасибо!
Пожалуйста, укажите правильное название для своего вопроса. –
Вы имеете в виду 'IDerived' вместо' ICustomReader'? – SWeko
Спасибо за комментарии Я исправил пример и заголовок –