Wskaźnik obiektu typu służy do oznaczenia typu obiektu. Jest to wymagane dla:
- Lookup Method (vtable)
- Sprawdzanie rzuca
- Znalezienie obiektu
Type
jeśli zadzwonisz GetType
.
Pole synchronizacji służy przede wszystkim do blokowania. Jest wypełniany tylko wtedy, gdy jest potrzebny, a gdy zamek jest zawsze niekwestionowany, CLR wykonuje "cienką" blokadę, która nie wymaga żadnych zewnętrznych danych. W przeciwnym razie jest to wpis w tabeli dotyczącej całego procesu - nie znam szczegółów tego, co jest w tabeli, ale wyobrażam sobie, że to rzeczy takie jak lista wątków oczekujących na monitorze obiektu. Oczywiście najważniejszą informacją jest to, czy zamek jest aktualnie w posiadaniu, przez który wątek i jaki jest jego numer (z powodu ponownego charakteru blokad .NET).
Syncblock jest również wypełniany, jeśli wywołujesz GetHashCode()
i nie jest on nadpisywany - w zasadzie wykorzystuje tabelę całego procesu do przydzielenia liczby stabilnej. (Adres obiektu nie jest wystarczająco dobry, ponieważ może się zmieniać z upływem czasu.)
Biorąc pod uwagę, że wszystkie obiekty są określonego typu, howelse powinno być znane, chyba że zapisuje gdzieś typ ...? Nie martw się o czytanie tego typu rzeczy, martw się o swój kod. –
@mP Dokładnie - dlaczego więc nie rejestruje tych informacji dla typów wartości? Zawsze warto wiedzieć, jak działają twoje narzędzia. – TarkaDaal