在C#中,为什么我可以使用TextWriter代替StreamWriter?

时间:2016-06-15 06:09:23

标签: c# inheritance abstract-class streamwriter textwriter

我对C#很新,所以请原谅任何看似基本的问题。

我想知道为什么 TextWriter StreamWriter 可以在我的代码示例(使用XML序列化方法)中提供相同的功能(或似乎)。< / p>

在这个例子中,我正在使用XML元素,属性等列表,并希望通过将它们传递到 serialize 函数(我创建)作为序列化它们列表。

以下是代码 (请注意使用TextWriter)

public static void serialize(List<Table> listOfTables)
{
    var ser = new XmlSerializer(typeof(List<Table>));

    TextWriter writer =
        new StreamWriter(@"Location\Sample.xml");

    ser.Serialize(writer, listOfTables);
    writer.Close();
}

这里的代码完全相同(或似乎是这样) (注意使用StreamWriter而不是TextWriter)

public static void serialize(List<Table> listOfTables)
{
    var ser = new XmlSerializer(typeof(List<Table>));

    StreamWriter writer =
        new StreamWriter(@"Location\Sample.xml");

    ser.Serialize(writer, listOfTables);
    writer.Close();
}

由于我很新,我理解继承和抽象类的基础知识,但我似乎无法将所有部分连接在一起以便完全理解这一点。

请发送您的想法和建议。谢谢!

1 个答案:

答案 0 :(得分:2)

两个实例都是StreamWriter个实例,但是您分配给基类类型TextWriter的变量的一个实例,这没关系。

由于XmlSerialize.Serialize has an overload接受基类TextWriter的实例,因此两个调用都可以,并且具有相同的净效果。