覆盖现有类并设置属性值

时间:2017-08-08 11:35:18

标签: c#

我对C#相当陌生,虽然我能够处理现有代码并进行更改但有些事情对我来说并不是很明显。我目前正在C#上进行Pluralsight课程以进一步了解。

我所看到的是,您可以创建一个现有类的自定义类供您自己使用。我看到了一个实现here,其中设置了Encoding的重写属性。我正在开展一个项目,我需要在各种场景中创建大量的XML文档。我希望对所有人使用相同的设置,并且我希望可以使用我自己的类来避免必须多次粘贴相同的代码。我想在实例化类时设置的设置代码如下:

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

我的目标是创建一个自定义类,它将被实例化,如下所示,但已经设置了上述设置

CustomXmlWriterSettings settings = new CustomXmlWriterSettings();

4 个答案:

答案 0 :(得分:3)

您不需要单独的类来指定现有类的状态。您只需要一个辅助方法:

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

答案 1 :(得分:1)

Daniel,使用dasblinkenlight的这种方法,你可以做到这一点:

var configuration = XmlHelper.GetCustomSettings();

对于exmaple,请检索这样的缩进:

var indent = configuration.Indent;

答案 2 :(得分: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;
                }
            }

        }

在任何地方使用此课程

答案 3 :(得分:-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;
   }
}

您可以根据需要使用任意数量的构造函数,只要它们在参数类型和顺序方面都不同。