Натан W уже предложил структуру IntPtr , которая может представлять указатель или дескриптор, однако, хотя эта структура является неотъемлемой частью платформы .NET, в .NET действительно нет указателей на скажем, и, конечно, не так, как указатели C.
Это в первую очередь потому, что .NET Framework является «управляемой» платформой, а память управляется, назначается, выделяется и освобождается с помощью CLR без вас, разработчика, без необходимости беспокоиться об этом (то есть без команд malloc!) из-за этого управления памятью у вас нет доступа к прямым адресам памяти.
Самая близкая вещь в .NET Framework, которую можно рассматривать как «указатель» (но на самом деле это не так), это делегат . Вы можете думать о делегате как о «указателе функции», однако это не совсем указатель в самом строгом смысле. Делегаты добавляют безопасность типов к вызывающим функциям, позволяя коду, который "вызывает" экземпляр делегата, гарантировать, что он вызывает правильный метод с правильными параметрами. Это не похоже на «традиционные» указатели, так как они не являются типобезопасными и просто ссылаются на адрес памяти.
Делегаты есть везде в .NET Framework, и когда вы используете событие или отвечаете на событие, вы используете делегатов.
Если вы хотите использовать C #, а не VB.NET, вы можете написать код, помеченный как « unsafe ». Это позволяет коду в небезопасном блоке работать вне защиты CLR. Это, в свою очередь, позволяет использовать «настоящие» указатели , точно так же как C, однако они все же имеют некоторые ограничения (например, то, что может быть по адресу памяти, на который указывает).