2010-07-11 44 views
2

有沒有辦法創建一個派生自XElement的類,但也控制可以添加到它的對象的類型?如何控制可添加到XElement的對象類型?

例如,說我有這個...

public class HtmlHead : XElement {} 

但我不能重寫Add()的方法,因爲它的下跌在XContainer水平。即使我要創建一個派生自XContainer的類,我仍然無法覆蓋Add()方法。

爲什麼我要這樣做,你問?

我想確保如果我的程序編譯它也正確解析HTML。就像,您只能將某些元素添加到HTML <head>標記,因此我想確保只能添加​​受支持的標記。

當然,你不會爲<head>標籤添加<anchor>標籤—你覺得我嗎?

回答

2

您可以通過構造函數控制傳遞的名稱。

public class HtmlHead : XElement 
{ 
    public HtmlHead(object content) : base("head") 
    { 
     this.Add(content); 
    } 

    public HtmlHead(params object[] content) : base("head", content) { } 
} 

添加項目時,會執行更改通知,或者您可以創建自定義方法來添加每個人都應該使用的方法。

+0

當然,你不能在編譯時檢查它 - 你需要創建定製的架構(這很容易)。 – 2010-07-11 06:38:33

+0

我已經有了像上面那樣的解決方案,但它只處理對象的創建。我認爲創建一個定製的方法來補充每個人都應該使用的是我將要採用的這條路。我只是希望有更好的方法。捕捉事件也是我考慮的一個解決方案,但它不會在編譯時被捕獲,而這正是我需要的。 嗯...想更多的解決方案... – jedmao 2010-07-11 07:52:34

+0

正如我所說,你需要一個定製的架構。就像'HtmlElement'覆蓋'Add(Anchor a)','Add(Title t)',...這會限制可用的類型,並且它也會是** compile **檢查。我會優先考慮不做這樣的事情(至少對於大多數html標籤來說) - 如果程序員不知道HTML,那就很不好(教育他們),你也可以稍後進行驗證。這是(恕我直言)太多的工作,沒有什麼好處。 – 2010-07-11 08:31:04

相關問題