2009-12-15 1 views

ответ

2

АдресOf является оператором VB и не существует в C#. Он создает делегата для процедуры. Делегат можно использовать позже, чтобы вызвать процедуру в коде, которая не включает имя процедуры.

Указатель в C/C++ - это представление адреса в памяти. Вы можете создать указатель на функцию и использовать ее для вызова этой функции, поэтому в этом конкретном случае указатели и делегаты ведут себя одинаково. Однако делегаты - это не просто указатели на функции. Самое важное отличие состоит в том, что делегаты могут быть связаны цепью и одновременно вызывать несколько процедур.

1

Пробу из MSDN говорит большая часть истории:

int number; 
int* p = &number; 
Console.WriteLine("Value pointed to by p: {0}", p->ToString()); 

Это присваивает адрес переменной номер в указатель на ан-междунар р.

Есть некоторые уловы к этому: 1. Переменная, адрес которой вы выбираете, должен быть инициализирован. Не проблема для типов значений, которые по умолчанию, но это проблема для ссылочных типов.

  1. В .NET переменные могут перемещаться в памяти, не зная об этом. Если вам нужно иметь дело с адресом переменной, вы действительно хотите использовать fixed для привязки переменной в ОЗУ.

  2. & может применяться только к переменной, а не к константе или значению. (Другими словами, вы не можете использовать конструкцию типа int * p = & GetSomeInt();)

  3. Опять же, ваш код должен быть скомпилирован в небезопасном режиме, который обозначает среду CLR, в которой вы будете использовать функции вне управляемых код "защитная сетка".

Смежные вопросы