В прошлом шаге мы объявили ненадежным кодом всю функцию. Но использовать модификатор unsafe можно и для определения блока ненадежного кода в любом месте. Обратите внимание что объявлять указатель можно только в ненадежном коде.
using System;
class MyClass
{
public static void Main()
{
int Data = 10;
unsafe
{
int* ptrData;
ptrData = &Data;
Console.WriteLine((int)ptrData );
}
Console.WriteLine(Data);
}
}
Использовать указатели как аргументы функций можно только в том случае, если она unsafe:
using System;
class MyClass
{
public static void Main()
{
int Data = 10;
unsafe
{
Print(&Data);
}
Console.WriteLine(Data);
}
public unsafe static void Print(int* i)
{
Console.WriteLine((int)i) ;
}
}
Результатом выполнения данного кода будет значение и адрес переменной. Указатели можно применять и для структур и классов. Смотрим пример:
using System;
struct My
{
public int x;
public int y;
}
class MyClass
{
public static void Main()
{
int Data = 10;
unsafe
{
Print(&Data);
My m = new My();
m.x=10;
m.y=12;
My* myp=&m;
Console.WriteLine(myp->x);
Console.WriteLine(myp->y);
}
Console.WriteLine(Data);
}
public unsafe static void Print(int* i)
{
Console.WriteLine((int)i) ;
}
}
Как видите для того, чтобы добраться до элементов структуры мы использовали оператор -> точно так же как в C++. А вот результат.
