【问题标题】:In C#, Why can I use TextWriter in place of StreamWriter? [duplicate]在 C# 中,为什么我可以使用 TextWriter 代替 StreamWriter? [复制]
【发布时间】:2023-08-13 06:27:01
【问题描述】:

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

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

在这个例子中,我正在处理一个 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();
}

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

请提出您的想法和建议。谢谢!

【问题讨论】:

  • 你在*.com/questions/1010555/…>和social.msdn.microsoft.com/Forums/vstudio/en-US/…>中有足够的信息

标签: c# inheritance abstract-class streamwriter textwriter


【解决方案1】:

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

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

【讨论】: