@startuml
 
class Stream {
    +Read()
    +ReadAsync()
    +Write()
    +WriteAsync()
    +Flush()
    +FlushAsync()
    +Seek()
    +SetLength()
    +Close()
    +Dispose()
}
 
class TextReader {
    +Read()
    +ReadAsync()
    +ReadBlock()
    +ReadBlockAsync()
    +ReadLine()
    +ReadLineAsync()
    +ReadToEnd()
    +ReadToEndAsync()
    +Close()
    +Dispose()
}
 
class TextWriter {
    +Write()
    +WriteAsync()
    +WriteLine()
    +WriteLineAsync()
    +Close()
    +Dispose()
}
 
class BinaryReader {
    +Read()
    +ReadBoolean()
    +ReadByte()
    +ReadBytes()
    +ReadChar()
    +ReadChars()
    +ReadDecimal()
    +ReadDouble()
    +ReadInt16()
    +ReadInt32()
    +ReadInt64()
    +ReadSByte()
    +ReadSingle()
    +ReadString()
    +ReadUInt16()
    +ReadUInt32()
    +ReadUInt64()
}
 
class BinaryWriter {
    +Write()
    +Write(Boolean)
    +Write(Byte)
    +Write(Byte[])
    +Write(Char)
    +Write(Char[])
    +Write(Decimal)
    +Write(Double)
    +Write(Int16)
    +Write(Int32)
    +Write(Int64)
    +Write(SByte)
    +Write(Single)
    +Write(String)
    +Write(UInt16)
    +Write(UInt32)
    +Write(UInt64)
}
 
class FileStream {
    +Read()
    +ReadAsync()
    +Write()
    +WriteAsync()
    +Flush()
    +FlushAsync()
    +Seek()
    +SetLength()
    +Close()
    +Dispose()
}
 
class StreamReader {
    +Read()
    +ReadAsync()
    +ReadBlock()
    +ReadBlockAsync()
    +ReadLine()
    +ReadLineAsync()
    +ReadToEnd()
    +ReadToEndAsync()
    +Close()
    +Dispose()
}
 
class StreamWriter {
    +Write()
    +WriteAsync()
    +WriteLine()
    +WriteLineAsync()
    +Flush()
    +FlushAsync()
    +Close()
    +Dispose()
}
 
class File {
    +Exists()
    +Copy()
    +Move()
    +Delete()
    +Create()
    +ReadAllText()
    +WriteAllText()
}
 
Stream <|-- FileStream
Stream <|-- TextReader
Stream <|-- TextWriter
Stream <|-- BinaryReader
Stream <|-- BinaryWriter
 
TextReader <|-- StreamReader
TextWriter <|-- StreamWriter
 
@enduml