Czy null
ma typ? Jaka jest wartość pusta reprezentowana wewnętrznie? Co dzieje się w poniższym kodzie?W .Net/C#, czy null jest mocno wpisany?
void Foo(string bar) {...}
void Foo(object bar) {...}
Foo((string)null);
Edycja: Odpowiedzi do tej pory były niespecyficzne i zbyt wysokiego poziomu. Rozumiem, że obiekt typu odwołania składa się ze wskaźnika na stosie, który wskazuje na położenie na stercie, które zawiera indeks bloku synchronizacji, uchwyt typu i pola obiektu. Kiedy ustawiam instancję obiektu na null
, gdzie dokładnie wskazuje wskaźnik na stosie? A w fragmencie kodu, czy obsada jest po prostu używana przez kompilator C#, aby zdecydować, które przeciążenie wywołać, i nie ma żadnego rzucania null?
Szukam szczegółowej odpowiedzi od kogoś, kto rozumie elementy wewnętrzne CLR.
Więc co dokładnie będzie na stosie, kiedy mam na myśli 'null'? –
@Matt - Edytowany, aby dodać więcej szczegółów niskiego poziomu. Czy to wystarczy? –
@Greg: Dzięki - Byłem zajęty w pracy, więc nie mają czasu, aby sprawdzić, IL oraz ECMA wg planu siebie. To podrapało moją intelektualną świąd. –