У меня проблема в том, что я не знаю, как подойти, и я надеюсь, что у людей здесь будут несколько полезных советов.
Я анализирую текстовые файлы, которые содержат несколько журналов (один журналза строку).Формат выглядит примерно так:
Date Type Description
10/20 A LogTypeADescription
10/20 B LogTypeBDescription
10/20 C LogTypeCDescription
Здесь вы можете видеть три «типа» журналов (A, B и C).В зависимости от типа журнала, я буду анализировать поле «Описание» по-разному.
Мой вопрос: как мне настроить структуру данных?Я хотел бы сделать что-то вроде этого:
class Log
{
DateTime Date;
String Type;
String Description;
public Log(String line)
{
Parse(line);
}
}
class ALog : Log { }
class BLog : Log { }
class CLog : Log { }
Теперь каждый производный класс может иметь свои уникальные свойства, в зависимости от того, как анализируется поле «Описание», и они по-прежнему будут поддерживать три «ядра»."properties (Date, Type и Description).
Пока все хорошо, за исключением того, что я не знаю, какой тип (производного) журнала мне нужен, пока я не проанализирую строку из файла журнала.Конечно, я мог бы проанализировать строку, а затем выяснить это, но я действительно хочу, чтобы код синтаксического анализа был в конструкторе "Log".Я хотел бы сделать что-то вроде этого:
void Parse(String line)
{
String[] pieces = line.Split(' ');
this.Date = DateTime.Parse(pieces[0]);
this.Type = pieces[1];
this.Description = pieces[2];
if(this.Type == "A")
this = new ALog();
else if(this.Type == "B")
this = new BLog();
else if(this.Type == "C")
this = new CLog();
}
Но, к сожалению, я не думаю, что это возможно.Я еще не пробовал, но я уверен, что делаю это:
Log l = new Log(line);
if(l.Type == "A") l = new ALog();
Было бы или незаконно, или уничтожило бы весь анализ, который я делал, когда я впервые создал «Журнал».
Есть предложения?