/ / Jaka jest różnica między variable = 0 i variable = nothing in .NET? - .net, vb.net

Jaka jest różnica między variable = 0 i variable = nothing in .NET? - .net, vb.net

Jaka jest różnica pomiędzy:

Dim intVal as integer
intVal = 0

i

intVal = nothing

Z MSDN przeczytałem, że nic nie ustawia wartości na 0:

Z MSDN:

Public Structure testStruct
Public name As String
Public number As Short
End Structure
Dim ts As testStruct, i As Integer, b As Boolean
ts = Nothing
" The preceding statement sets ts.name to "" and ts.number to 0.
i = Nothing
b = Nothing
" The preceding statements set i to 0 and b to False.

Odpowiedzi:

7 dla odpowiedzi № 1

Nic nie jest zwykle używane do odwołań do obiektów, jeśliprzypisujesz go do typu wartości, który inicjalizujesz z wartością domyślną. W świecie .NET wartości domyślne to po prostu blok pamięci pełen zer. Tak więc liczba całkowita przypisana do niczego będzie równa 0, a struktura przypisana do niczego będzie strukturą wypełnioną zerami.

Referencja zerowa jest specjalną referencją, tzn. Nie ma odniesienia i jest wyrażana jako wskaźnik ze wszystkimi zerami.

W języku C # możesz użyć default(TYPE) Aby uzyskać ten sam wynik, jest on używany do przypisywania wartości zero do tego, co chcesz.

String jest typem referencji, podobnie jak obiekt, więc łańcuchy nie będą przypisane do "", ale do Nothing, łańcuchy nie są typami wartości.

Dim s as String
s = Nothing

Console.WriteLine Object.ReferenceEquals(s, Nothing) " Will print true
Console.WriteLine Object.ReferenceEquals(s, "") " Will print false

Ciągi są nadal typami referencyjnymi, więc po przypisaniu go do Nic ustawisz odniesienie na zero.


3 dla odpowiedzi № 2

W .Net liczba całkowita jest typem wartości i dlatego nie może mieć wartości NULL.

Jeśli utworzysz zmienną typu integer i nie będziesz jej przypisywać, będzie to 0 ze względu na sposób działania tego języka.

To nie jest przesada, aby powiedzieć, że niektóre z najbardziejirytujące / powszechne błędy w nowoczesnych komputerach zostały spowodowane przez zmienne niezainicjowane, więc zespół .Net podjął decyzję, aby upewnić się, że wszystkie typy wartości nie cierpią z powodu tego problemu.

Zła praktyka polega jednak na założeniu, że kompilator / JIT rozwiąże te zmienne do znanej wartości, takiej jak 0 dla liczb całkowitych lub Fałsz dla wartości logicznych, więc zawsze powinieneś używać swojego pierwszego przykładu.

Ale żeby jasno odpowiedzieć na twoje pytanie, nie ma różnicy, ale najlepiej jest użyć pierwszego przykładu.


3 dla odpowiedzi nr 3

Nic jest specjalnym literałem, który reprezentuje wartość domyślnąwartość zmiennej. Wartość, jaką ma, kiedy nigdy nie została przypisana. Fałsz dla Boolean, 0 dla typów liczbowych, północ 1 stycznia roku 0 dla DateTime, zerowa referencja dla referencyjnego typu referencyjnego, Nic dla typów zerowalnych, dla wszystkich członków ustawiona jest wartość Nothing dla typu struktury.

Myślę, że większość programistów zdecydowanie woli jawnie ustawić liczbę całkowitą na 0 i wartość boolowską na fałsz (ja robię), używając Nic jest poprawny. Nie możesz tego uniknąć Nic dla typów referencyjnych, typów zerowych oraz w kodzie, który używa generycznych.