2017-08-08 14 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

@ダニエルこのように: '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はsleaedクラスなので継承できません –

+0

@alaa_sayegh他の答えは別のアプローチを示しています。私はそれを正しく理解して使用できるように、実装の理論についてのガイダンスを必要としています。 – Daniel

1

あなたがこれを行うことができますdasblinkenlightからこのアプローチにはダニエル、:

var configuration = XmlHelper.GetCustomSettings(); 

そしてexmapleため、このようにインデントを取得:

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

関連する問題