C# Stream Type

Stream abstract type

What is a Stream? In the C# language, you use many different derived streams, such as FileStream and MemoryStream. However, the Stream type itself isn't usually used directly. It instead is an abstract base class for more derived streams.

This C# example program uses the Stream type. It casts a derived type to Stream.

Example

Because Stream is an abstract base class for other streams such as FileStream and MemoryStream, you can implicitly cast those streams to Stream types. Here, we introduce a method that receives a Stream formal parameter. You can pass instances of FileStream and MemoryStream to it. This shows how you can use the Stream abstraction to perform certain tasks.

MemoryStream Use File.Open Examples
Program that uses Stream type [C#]

using System;
using System.IO;

class Program
{
    static void Main()
    {
	FileStream stream1 = File.Open("C:\\a", FileMode.Open);
	Print(stream1);

	MemoryStream stream2 = new MemoryStream(new byte[1234]);
	Print(stream2);
    }

    static void Print(Stream stream)
    {
	Console.WriteLine(stream.Length);
	Console.WriteLine(stream.Position);
    }
}

Output

5469165
0
1234
0

Avoiding bloat. Because Stream can substitute for many different derived streams, it is sometimes useful to have a field or parameter of type Stream. This means you can avoid having duplicate methods (such as one that receives FileStream and one that receives MemoryStream).

.NET Framework information

Implementation of Stream. The Stream class is an abstract class containing many abstract and virtual methods. These methods are implemented in the classes that inherit from Stream. Although this is not important directly, it helps us understand the architecture of Stream types in the .NET Framework.

Summary

The C# programming language

We looked at the Stream type in the C# language and how it is an abstract base class for more useful streams. It is both an implementation of some parts of other streams and also a useful way for you to deal with different streams at a higher level of abstraction, leading to more compact code.

File Handling
.NET