Niektóre parametry w typach pochodnych strumienia są zmieniane
W programie .NET 6 zmieniono nazwy niektórych parametrów metod na typach pochodnych, aby były zgodne z System.IO.Stream klasą bazową.
Opis zmiany
W poprzednich wersjach platformy .NET kilka typów pochodzących z Stream metod zastępowania, ale używać różnych nazw parametrów niż te używane przez typ podstawowy. Na przykład parametr tablicy bajtów klasy DeflateStream.Read(Byte[], Int32, Int32) ma nazwę array
, a odpowiadający mu argument w metodzie klasy bazowej ma nazwę buffer
.
Na platformie .NET 6 wszystkie typy pochodzące z System.IO.Stream niezgodności nazw parametrów zostały wprowadzone zgodnie z typem podstawowym przy użyciu tych samych nazw parametrów co typ podstawowy.
Wprowadzona wersja
.NET 6
Przyczyna wprowadzenia zmiany
Istnieje kilka powodów zmiany:
- Jeśli przekazano nieprawidłowy argument i został zgłoszony wyjątek, ten wyjątek mógł zawierać nazwę parametru podstawowego lub nazwę pochodnego parametru, w zależności od implementacji. Ponieważ obiekt wywołujący mógł używać odwołania wpisanego jako podstawowego lub jako typu pochodnego, nie można nazwa argumentu w wyjątku zawsze być poprawna.
- Posiadanie różnych nazw parametrów utrudnia spójne weryfikowanie zachowania we wszystkich Stream implementacjach.
- Platforma .NET 6 dodaje publiczną metodę do Stream sprawdzania poprawności argumentów, a ta metoda musi mieć spójną nazwę parametru do użycia.
Zalecana akcja
Efekt tej zmiany powodującej niezgodność jest minimalny:
- W przypadku istniejących plików binarnych jego wpływ jest ograniczony do kodu, który używa odbicia w celu zbadania nazw parametrów na typach pochodnych, których dotyczy problem.
- W przypadku kodu źródłowego jego wpływ jest ograniczony do kodu, który używa nazwanych parametrów do wywoływania metod na typie pochodnego strumienia przy użyciu zmiennej typizowanej jako typ pochodny.
W obu przypadkach zalecaną akcją jest spójne użycie nazwy parametru podstawowego.
Dotyczy interfejsów 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)
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla