Książka CLR Via C#
przedstawia prosty sposób klonowania obiektów poprzez serializację binarną.Co właściwie robi StreamingContextStates.Clone?
Określa StreamingContextStates.Clone
podczas tworzenia BinaryFormatter
jak tak:
var formatter = new BinaryFormatter
{
Context = new StreamingContext(StreamingContextStates.Clone)
};
The documentation for StreamingContextStates.Clone
mówi, że
Określa, że wykres obiekt jest przebity. Użytkownicy mogą założyć, że klonowany wykres będzie nadal istniał w ramach tego samego procesu i będzie bezpieczny w dostępie do uchwytów lub innych odniesień do niezarządzanych zasobów.
Wystarczająco fair - ale tak naprawdę nie wiem, co to właściwie znaczy. W jaki sposób to faktycznie zmienia zachowanie BinaryFormatter
? Czy ktokolwiek może wymieniać jakieś konkretne efekty, które używają tej flagi?
Dla przypomnienia, ja ** ** silnie sugerują, że można uniknąć 'BinaryFormatter' w, no większości przypadków. Ma kilka rzeczy, gdzie jest to przydatne, ale widziałem * tak wiele * osób ma * tak wiele * bólu spowodowanych tym ... Rzeczywiście, problemy z 'BinaryFormatter' były częścią tego, dlaczego bardzo zaangażowałem się w serializację kilka lat temu –
Ta właściwość jest ponownie eksponowana w 'ISerializable.GetObjectData (...)', więc technicznie każda implementacja ** mogłaby w teorii ** wybrać zrobienie czegoś innego na podstawie wartości 'StreamingContextStates'. Nie wiem, ile, jeśli w ogóle, * czy *, ale –
@MarcGravell Interesujące, dzięki. (I być może ta próbka powinna zostać usunięta z CLR Via C# dla następnej edycji wtedy;) –