unsafe это не надежный код. То есть этот код потенциально опасный. К такому коду относятся например операции с указателями. Работа у указателями является довольно тонким делом и чревата возникновением всяких там ошибок. Давайте посмотрим пример. Вот код:
using System;
class MyClass
{
public static void Main()
{
int Data = 10;
int* ptrData = &Data;
Console.WriteLine(Data);
Console.WriteLine((int)ptrData );
}
}
Попробуйте его скомпилировать. Вы получите сообщение об ошибках.

Это сообщение говорит, что указатели можно использовать только в unsafe варианте. Давайте сделаем эту функцию unsafe.
using System;
class MyClass
{
public unsafe static void Main()
{
int Data = 10;
int* ptrData = &Data;
Console.WriteLine(Data);
Console.WriteLine((int)ptrData );
}
}
Теперь все будет нормально.

При условии что Вы будете использовать ключ компилятора /unsafe. Вот пример Bat файла.
csc /unsafe 1.cs
Можно запускать. В результате Вы увидите и значение переменной и ее адрес.
