我有一個關於繼承問題,所以我將描述如下情況:繼承和多重構造
我讀包含日誌的文本文件。 (每行一個日誌) 每個日誌線將具有以下格式: 「日期類型描述」
然而,根據日誌的「類型」,我將不得不解析「說明」不同,拉出不同的領域。
下面是一些例子:
5/1/2011 Information Field1, Field2, Field3
5/2/2011 Error Field1
- 所以,我試圖做的是這樣的:
- 獲得一個線路輸出日誌
的-Parse根據圖案爲「日期類型說明」
-Look在‘類型’字段,並創建新的對象/解析需要說明
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」變量將自身用作其自己的構造函數的參數。
我的問題是: 有沒有這樣做的標準方式?或者,這個實施有什麼問題嗎?
-
編輯:
另外,我應該提到:我的理由是,我會分析行一次走出日期和類型,然後再分析它,以獲得更精細的細節。
我決定使用繼承,所以我不必解析出Date和Type字段兩次。
爲什麼不只是使用'Log'來做條件分析呢? – 2011-03-01 14:22:02
@Mr。失望:每種類型的日誌都有不同的參數,所以我不想把「Field1,Field2,Field3等」如果它們不是必需的,則記錄在「日誌」中。 – Eric 2011-03-01 14:24:41
讚賞,但如果它們總是包含'Type'和'Description',那麼這仍然可以發生在基類中。 – 2011-03-01 14:27:33