C# XmlTextWriter继承和强制转换异常

C# XmlTextWriter继承和强制转换异常,c#,.net,xml,inheritance,casting,C#,.net,Xml,Inheritance,Casting,我想创建一个XmlTextWriter的扩展,其中包含许多自定义方法,用于以我自己的文件格式编写我使用的类和结构(我不想使用序列化,因为有时标记嵌套可能非常深入,因此定义所有XmlElement属性并创建所有必要的投影将非常繁琐)。 以下是我所做的: public sealed class MySpecialWriter : XmlTextWriter { private static readonly XmlWriterSettings s_DefaultSettings = new

我想创建一个XmlTextWriter的扩展,其中包含许多自定义方法,用于以我自己的文件格式编写我使用的类和结构(我不想使用序列化,因为有时标记嵌套可能非常深入,因此定义所有XmlElement属性并创建所有必要的投影将非常繁琐)。 以下是我所做的:

public sealed class MySpecialWriter : XmlTextWriter
{
    private static readonly XmlWriterSettings s_DefaultSettings = new XmlWriterSettings
    {
        CloseOutput = true,
        Encoding = new UTF8Encoding(false),
        Indent = true,
        IndentChars = "\t",
        NewLineChars = Environment.NewLine,
        NewLineHandling = NewLineHandling.Replace,
        OmitXmlDeclaration = false,
    };

    public MySpecialWriter(Stream output, Encoding encoding) : base(output, encoding) { }

    public MySpecialWriter(String output, Encoding encoding) : base(output, encoding) { }

    public MySpecialWriter(TextWriter output) : base(output) { }

    public static MySpecialWriter Initialize(StringBuilder sb)
    {
        return (MySpecialWriter)Create(sb, s_DefaultSettings);
    }

    public void WriteMyClass(MyClass value)
    {
        ...
    }
}
当我尝试使用它时(只是一个简单的测试,看看它是否工作):

我从“Initialize”方法中得到以下异常:

无法将“System.Xml.XmlWellFormedWriter”类型的对象强制转换为“System.Xml.XmlTextWriter”类型。

您能帮我吗?

当您这样做时:

return (MySpecialWriter)Create(sb, s_DefaultSettings);
Create
引用
XmlWriter.Create
方法,该方法返回
xmltextwitter
的实例,而不是
MySpecialWriter
的实例,因此强制转换失败。您应该使用
new
创建类的实例

无论如何,我不认为您真的需要在这里继承
XmlTextWriter
(除非您特别需要使用
XmlTextWriter
的受保护方法,这是不太可能的)。您可以通过为
XmlWriter
编写扩展方法来实现相同的结果

return (MySpecialWriter)Create(sb, s_DefaultSettings);