ストリーム派生型での一部のパラメーター名の変更
.NET 6 では、System.IO.Stream から派生した型のメソッドの一部のパラメーター名が、基底クラスと一致するように変更されました。
変更内容
以前の .NET バージョンでは、Stream から派生したいくつかの型では、メソッドがオーバーライドされますが、使用されるパラメーター名は基本型で使用されているものとは異なっています。 たとえば、DeflateStream.Read(Byte[], Int32, Int32) のバイト配列パラメーターには array
という名前が付けられていますが、基底クラス メソッド内のそれに対応する引数には buffer
という名前が付けられています。
.NET 6 では、パラメーター名が一致していない System.IO.Stream から派生する型はすべて、基本型と同じパラメーター名を使用することにより基本型に準拠するようになりました。
導入されたバージョン
.NET 6
変更理由
この変更にはいくつかの理由があります。
- 無効な引数が渡され例外がスローされた場合、その例外には、実装に応じて、基本パラメーターの名前が含まれることもあれば、派生パラメーターの名前が含まれることもありました。 呼び出し元では、基本として型指定された参照または派生型として型指定された参照のいずれも使用されている可能性があるので、例外の引数名が常に正しいとは限りません。
- パラメーター名が異なると、すべての Stream 実装にわたって動作を一貫して検証することが難しくなります。
- .NET 6 では、引数を検証するために Stream に対してパブリック メソッドが追加されました。このメソッドでは使用するパラメーター名に一貫性を持たせる必要があります。
推奨アクション
この破壊的変更の影響はごくわずかです。
- 既存のバイナリの場合、その影響は、影響を受ける派生型のパラメーターの名前を調べるためにリフレクションを使用するコードに限定されます。
- ソース コードの場合、その影響は、派生ストリーム型に対してその派生型として型指定された変数を使用してメソッドを呼び出すために名前付きパラメーターを使用するコードに限定されます。
どちらの場合も、基本パラメーター名を一貫して使用することをお勧めします。
影響を受ける API
- System.IO.BufferedStream.Read(Byte[], Int32, Int32)
- System.IO.BufferedStream.Write(Byte[], Int32, Int32)
- System.IO.Compression.DeflateStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)
- System.IO.Compression.DeflateStream.Read(Byte[], Int32, Int32)
- System.IO.Compression.DeflateStream.ReadAsync(Byte[], Int32, Int32, CancellationToken)
- System.IO.Compression.DeflateStream.Write(Byte[], Int32, Int32)
- System.IO.Compression.DeflateStream.WriteAsync(Byte[], Int32, Int32, CancellationToken)
- System.IO.Compression.GZipStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)
- System.IO.Compression.GZipStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)
- System.IO.Compression.GZipStream.Read(Byte[], Int32, Int32)
- System.IO.Compression.GZipStream.ReadAsync(Byte[], Int32, Int32, CancellationToken)
- System.IO.Compression.GZipStream.Write(Byte[], Int32, Int32)
- System.IO.Compression.GZipStream.WriteAsync(Byte[], Int32, Int32, CancellationToken)
- System.IO.FileStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)
- System.IO.FileStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)
- System.IO.FileStream.Read(Byte[], Int32, Int32)
- System.IO.FileStream.Write(Byte[], Int32, Int32)
- System.Net.Sockets.NetworkStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)
- System.Net.Sockets.NetworkStream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)
- System.Net.Sockets.NetworkStream.Read(Byte[], Int32, Int32)
- System.Net.Sockets.NetworkStream.ReadAsync(Byte[], Int32, Int32, CancellationToken)
- System.Net.Sockets.NetworkStream.Write(Byte[], Int32, Int32)
- System.Net.Sockets.NetworkStream.WriteAsync(Byte[], Int32, Int32, CancellationToken)
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET