Виртуальные методы используются в дизайне интерфейса. Например, в Windows есть интерфейс под названием IUnknown, как показано ниже:
interface IUnknown {
virtual HRESULT QueryInterface (REFIID riid, void **ppvObject) = 0;
virtual ULONG AddRef () = 0;
virtual ULONG Release () = 0;
};
Эти методы предоставляются пользователю интерфейса для реализации. Они необходимы для создания и уничтожения определенных объектов, которые должны наследовать IUnknown. В этом случае время выполнения известно о трех методах и ожидает, что они будут реализованы при их вызове. Поэтому в некотором смысле они действуют как договор между самим объектом и тем, что использует этот объект.
Не источник вашей проблемы, но вам нужно
using (MemoryStream memoryStream = new MemoryStream())
{
serializer.Serialize(memoryStream, this);
memoryStream.Seek(0, SeekOrigin.Begin);
using (StreamReader reader = new StreamReader(memoryStream))
{
return reader.ReadToEnd();
}
}