У меня есть вопрос относительно наследования, поэтому я опишу следующий сценарий:
Я читаю текстовый файл, содержащий журналы. (Один журнал на строку)
Каждая строка журнала будет иметь следующий формат:
«Описание типа даты»
Однако, в зависимости от «Типа» журнала, мне придется разбирать «Описание» по-разному и извлекать разные поля.
Вот несколько примеров:
5/1/2011 Information Field1, Field2, Field3
5/2/2011 Error Field1
-
Итак, я попытался сделать следующее:
-Получить строку из журнала
Разрежьте его по шаблону «Описание типа даты»
-Смотрите в поле «Тип» и создайте новые объекты / описание разбора при необходимости
public class Log
{
public DateTime Date;
public String Type;
public String Description;
public Log(String line)
{
this.Date = GetDate();
this.Type = GetType();
this.Description = GetDescription();
}
}
public class InformationLog : Log
{
public String Field1;
public String Field2;
public String Field3;
public InformationLog(Log log)
{
this.Field1 = GetField1(log.Description);
this.Field1 = GetField2(log.Description);
this.Field1 = GetField3(log.Description);
}
}
public class Client
{
public void Main()
{
String line = ReadFileAndGetLine(); // Get a line from the file
Log log = new Log(line);
if(log.Type == "Information")
log = new InformationLog(log); // Is this right?
}
}
Это работает так, как я хочу, но, похоже, это не может быть хорошей практикой. Переменная "log" использует себя в качестве параметра для своего собственного конструктора.
Мой вопрос:
Есть ли стандартный способ сделать это? Или что-то не так с этой реализацией?
-
Edit:
Кроме того, я должен упомянуть: я рассуждал о том, что я однажды проанализирую строку, чтобы получить дату и тип, а затем снова проанализирую ее, чтобы получить более точные сведения.
Я решил использовать наследование, чтобы мне не приходилось анализировать поля Date и Type дважды.