В C#, почему я могу использовать TextWriter вместо StreamWriter?

Я довольно новичок в C#, поэтому прошу прощения за любые вопросы, которые кажутся основными.

Мне интересно, почему TextWriter и StreamWriter могут одновременно выполнять одну и ту же функцию (или, кажется, выполнять) в моем примере кода (работа с методом сериализации XML).

В этом примере я играю со списком элементов XML, атрибутов и т. Д. И надеюсь их сериализовать, передав их в функцию сериализации (которую я создал) в виде списка.

Вот код (обратите внимание на использование 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 ответ

Оба случая StreamWriter экземпляры, но один экземпляр, который вы назначаете переменной типа базового класса TextWriterэто нормально.

поскольку XmlSerialize.Serialize имеет перегрузку, которая принимает экземпляр базового класса TextWriter, оба звонка в порядке и имеют одинаковый чистый эффект.

Другие вопросы по тегам