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