2017-08-08 93 views
1

我對C#相當陌生,雖然我能夠處理現有的代碼並進行更改,但有些事情對我來說並不是很明顯。我目前正在C#上做一個Pluralsight課程,以進一步提高我的知識水平。覆蓋一個現有的類並設置屬性值

我所看到的是,您可以爲您自己的用途創建一個現有類的自定義類。我看到一個執行here,其中設置了Encoding的重寫屬性。我正在開發一個項目,我需要在各種場景中創建大量XML文檔。我想爲所有人使用相同的設置,我希望可以使用我自己的類來避免必須多次粘貼相同的代碼。設置代碼,我想實例化類時設置低於:

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Indent = true; 
settings.IndentChars = ("\t"); 
settings.OmitXmlDeclaration = true; 

我的目標是創建一個將被實例化類似下面的自定義類,但將有上面的設置已經設置

CustomXmlWriterSettings settings = new CustomXmlWriterSettings(); 
+0

我相信你正在編寫一個自定義XML編寫器,並將這個CustomXML編寫器設置傳遞給它,而初始化正確嗎?如果是這種情況還有另一種方法可以做到這一點 – Ramankingdom

回答

3

您不需要單獨的類來指定現有類的狀態。所有你需要的是一個輔助方法:

static class XmlHelper { 
    public static XmlWriterSettings GetCustomSettings() { 
     return new XmlWriterSettings { 
      Indent = true, 
      IndentChars = ("\t"), 
      OmitXmlDeclaration = true 
     }; 
    } 
} 
+0

感謝您的建議,我將如何使用這個幫助類實例化一個新的對象與這些設置? – Daniel

+0

@Daniel像這樣:'XmlWriterSettings settings = XmlHelper.GetCustomSettings();' – dasblinkenlight

+0

謝謝,這叫做什麼?只是一個幫手方法?我想了解更多信息,並想知道哪個主題更深入研究 – Daniel

-1

您可以使用構造函數:

public class CustomXmlWriterSettings : YourXmlWriterSettings // Use your own class as XmlWriterSettings is sealed and therefore uninheritable 
{ 
    public CustomXmlWriterSettings() 
    { 
    Indent = true; 
    IndentChars = ("\t"); 
    OmitXmlDeclaration = true; 
    } 

    public CustomXmlWriterSettings(bool in, string ch, bool de) 
    { 
    Indent = in; 
    IndentChars = ch; 
    OmitXmlDeclaration = de; 
    } 
} 

,只要你想你可以使用盡可能多的構造函數,只要它們都在參數類型和順序不同。

+0

有一個被刪除的答案,但它提示了相同的方法,並且VS被踢出的錯誤是'CustomXmlWriterSettings':不能從密封類型'XmlWriterSettings''派生。 – Daniel

+0

XmlWriterSettings是一個蹩腳的類,所以它不能繼承 –

+0

@alaa_sayegh其他答案顯示了不同的方法,我只需要實施它的理論的指導,以便我可以正確理解並使用它。 – Daniel

1

丹尼爾,從dasblinkenlight這種方法,你可以這樣做:

var configuration = XmlHelper.GetCustomSettings(); 

而對於〔實施例,檢索縮進像這樣:

var indent = configuration.Indent; 
0

這個你可能想

public class CustomXmlWriter : XmlWriter 
     { 
      public override XmlWriterSettings Settings 
      { 
       get 
       { 
        // for this you can use method as well 
        var settings = new XmlWriterSettings(); 
        settings = new XmlWriterSettings(); 
        settings.Indent = true; 
        settings.IndentChars = ("\t"); 
        settings.OmitXmlDeclaration = true; 
        return settings; 
       } 
      } 

     } 

並隨時隨地使用此課程

+0

不幸的是'XmlWriter'是一個密封的類型,所以你會得到錯誤,從dasblinkelight有一個工作答案,但謝謝你! – Daniel

+0

@Daneil https://msdn.microsoft.com/en-us/library/system.xml.xmlwriter(v=vs.110).aspx。根據文件的抽象類。 XmlWriterSettings是密封的。沒有問題 – Ramankingdom