2011-02-07 16 views
5

Cuando escribía alguna rutina de E/S en C++, normalmente la hacía lo más genérica posible, operando en las interfaces desde <iostream>.C# - pregunta de flujo

Por ejemplo:

void someRoutine(std::istream& stream) { ... } 

¿Cómo debería hacerse lo mismo en C#?

sospecho que podría escribir mis rutinas basado en la System.IO.TextReader o System.IO.TextWriter, pero no estoy seguro.


Obviamente estoy en busca de una misma clase base en C#, que es tan genérico como std::istream o std::ostream y que puede extenderse de muchas maneras (por ejemplo, como boost::iostreams extiende las corrientes std::).

+1

Una clase abstracta es tan básica como la que obtendrás ... (aunque también depende de lo que estés buscando, también hay [System.IO.Stream] (http://msdn.microsoft. com/en-us/library/system.io.stream.aspx)) –

Respuesta

5

Si desea trabajar con cadenas, debe tomar TextReader o TextWriter.

Si desea trabajar con bytes, debe tomar un Stream.

Estas clases se heredan mediante implementaciones concretas como FileStream, StringWriter y NetworkStream.

+2

Eso no es exactamente cierto. TextReader y TextWriter operan en transmisiones, pero no están en la cadena de herencia de Stream o FileStream. Son las bases para StringReader y StringWriter, respectivamente. Para lo que el OP está buscando hacer, System.IO.Stream es la clase apropiada (equivalente a un flujo combinado de entrada y salida). –

+1

@Chris: nunca dije eso. Dije _ estas_ clases. – SLaks

+0

He malinterpretado tu respuesta, disculpas. Tomé "Estas clases" para referirme a todas las clases mencionadas anteriormente, supongo que OP podría haber cometido el mismo error. –

3

Utilice System.IO.Stream si solo le interesan los bytes. TextReader/TextWriter son para cuando sabes que los datos subyacentes son texto.

1

La clase base esStream. MemoryStream, FileStream, etc. heredan de esta clase.

0

Puede hacer que la función C# tome una secuencia (System.IO.Stream) como en C++. Si esto es apropiado depende de la función que escriba.