why do we use "unsafe" code in C#?