1+ namespace ca1844
2+ {
3+ //<snippet1>
4+ // This class violates the rule.
5+ public class BadStream : Stream
6+ {
7+ private readonly Stream _innerStream ;
8+
9+ public BadStream ( Stream innerStream )
10+ {
11+ _innerStream = innerStream ;
12+ }
13+
14+ public override bool CanRead => _innerStream . CanRead ;
15+ public override bool CanSeek => _innerStream . CanSeek ;
16+ public override bool CanWrite => _innerStream . CanWrite ;
17+ public override long Length => _innerStream . Length ;
18+ public override long Position { get => _innerStream . Position ; set => _innerStream . Position = value ; }
19+
20+ public override async Task < int > ReadAsync ( byte [ ] buffer , int offset , int count , CancellationToken cancellationToken )
21+ {
22+ // ...
23+ return await _innerStream . ReadAsync ( buffer , offset , count , cancellationToken ) ;
24+ }
25+
26+ public override async Task WriteAsync ( byte [ ] buffer , int offset , int count , CancellationToken cancellationToken )
27+ {
28+ // ...
29+ await _innerStream . WriteAsync ( buffer , offset , count , cancellationToken ) ;
30+ }
31+
32+ // Other required overrides
33+ public override void Flush ( ) => _innerStream . Flush ( ) ;
34+ public override int Read ( byte [ ] buffer , int offset , int count ) => _innerStream . Read ( buffer , offset , count ) ;
35+ public override long Seek ( long offset , SeekOrigin origin ) => _innerStream . Seek ( offset , origin ) ;
36+ public override void SetLength ( long value ) => _innerStream . SetLength ( value ) ;
37+ public override void Write ( byte [ ] buffer , int offset , int count ) => _innerStream . Write ( buffer , offset , count ) ;
38+ }
39+
40+
41+ // This class satisfies the rule.
42+ public class GoodStream : Stream
43+ {
44+ private readonly Stream _innerStream ;
45+
46+ public GoodStream ( Stream innerStream )
47+ {
48+ _innerStream = innerStream ;
49+ }
50+
51+ public override bool CanRead => _innerStream . CanRead ;
52+ public override bool CanSeek => _innerStream . CanSeek ;
53+ public override bool CanWrite => _innerStream . CanWrite ;
54+ public override long Length => _innerStream . Length ;
55+ public override long Position { get => _innerStream . Position ; set => _innerStream . Position = value ; }
56+
57+ public override async ValueTask < int > ReadAsync ( Memory < byte > buffer , CancellationToken cancellationToken = default )
58+ {
59+ // ...
60+ return await _innerStream . ReadAsync ( buffer , cancellationToken ) ;
61+ }
62+
63+ public override async ValueTask WriteAsync ( ReadOnlyMemory < byte > buffer , CancellationToken cancellationToken = default )
64+ {
65+ // ...
66+ await _innerStream . WriteAsync ( buffer , cancellationToken ) ;
67+ }
68+
69+ public override async Task < int > ReadAsync ( byte [ ] buffer , int offset , int count , CancellationToken cancellationToken )
70+ {
71+ return await this . ReadAsync ( buffer . AsMemory ( offset , count ) , cancellationToken ) ;
72+ }
73+
74+ public override async Task WriteAsync ( byte [ ] buffer , int offset , int count , CancellationToken cancellationToken )
75+ {
76+ await this . WriteAsync ( buffer . AsMemory ( offset , count ) , cancellationToken ) ;
77+ }
78+
79+ // Other required overrides
80+ public override void Flush ( ) => _innerStream . Flush ( ) ;
81+ public override int Read ( byte [ ] buffer , int offset , int count ) => _innerStream . Read ( buffer , offset , count ) ;
82+ public override long Seek ( long offset , SeekOrigin origin ) => _innerStream . Seek ( offset , origin ) ;
83+ public override void SetLength ( long value ) => _innerStream . SetLength ( value ) ;
84+ public override void Write ( byte [ ] buffer , int offset , int count ) => _innerStream . Write ( buffer , offset , count ) ;
85+ }
86+ //</snippet1>
87+ }
0 commit comments