Шаг 124 - Ненадежный код дальше

В прошлом шаге мы объявили ненадежным кодом всю функцию. Но использовать модификатор 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++. А вот результат.

gif/124_1.gif (3961 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.