Vb.net Указатели - PullRequest
       8

Vb.net Указатели

3 голосов
/ 17 апреля 2009

Что в vb.net больше всего похоже на указатель, что означает C poinetrs?

У меня есть TreeView внутри класса. Мне нужно выставить некоторые конкретные узлы (или листья), которые могут быть изменены внешними объектами.

Ответы [ 5 ]

4 голосов
/ 17 апреля 2009

Натан W уже предложил структуру IntPtr , которая может представлять указатель или дескриптор, однако, хотя эта структура является неотъемлемой частью платформы .NET, в .NET действительно нет указателей на скажем, и, конечно, не так, как указатели C.

Это в первую очередь потому, что .NET Framework является «управляемой» платформой, а память управляется, назначается, выделяется и освобождается с помощью CLR без вас, разработчика, без необходимости беспокоиться об этом (то есть без команд malloc!) из-за этого управления памятью у вас нет доступа к прямым адресам памяти.

Самая близкая вещь в .NET Framework, которую можно рассматривать как «указатель» (но на самом деле это не так), это делегат . Вы можете думать о делегате как о «указателе функции», однако это не совсем указатель в самом строгом смысле. Делегаты добавляют безопасность типов к вызывающим функциям, позволяя коду, который "вызывает" экземпляр делегата, гарантировать, что он вызывает правильный метод с правильными параметрами. Это не похоже на «традиционные» указатели, так как они не являются типобезопасными и просто ссылаются на адрес памяти.

Делегаты есть везде в .NET Framework, и когда вы используете событие или отвечаете на событие, вы используете делегатов.

Если вы хотите использовать C #, а не VB.NET, вы можете написать код, помеченный как « unsafe ». Это позволяет коду в небезопасном блоке работать вне защиты CLR. Это, в свою очередь, позволяет использовать «настоящие» указатели , точно так же как C, однако они все же имеют некоторые ограничения (например, то, что может быть по адресу памяти, на который указывает).

3 голосов
/ 17 апреля 2009

C #, и я также верю, что VB.Net будет работать над концепцией ссылок. По сути, это означает, что когда вы говорите

A a = новый A ()

'a' является ссылкой, а не фактическим объектом.

Так что, если я пойду

B b = a

b - это еще одна ссылка на тот же базовый объект.

Когда вы хотите выставить какие-либо внутренние объекты, вы можете просто сделать это, выставив 'свойства'. Убедитесь, что вы не предоставляете установщики для свойств, или что если вы это сделаете, есть код, чтобы проверить, является ли значение допустимым.

ByRef используется, когда вы хотите передать объект в качестве параметра, и когда вы хотите, чтобы вызываемый метод мог изменять ссылку (в отличие от объекта).

Как уже упоминалось выше, если вы разместите некоторый код, это будет легче объяснить.

2 голосов
/ 30 мая 2012

Лучший способ сделать это - просто распределить все вручную:

Вы можете свободно перемещаться вверх или вниз по каждому стеку, не нажимая и не щелкая.

Dim Stack(4095) as Byte    'for 8bit   - 1 bytes each entry
Dim Stack(4095) as Integer 'for 16bit  - 2 bytes each entry
Dim Stack(4095) as Long    'for 32bit  - 4 bytes each entry
Dim Stack(4095) as Double  'for 64 bit - 8 bytes each entry

Dim i as integer           'Where i is your Stack Pointer(0 through 4095)
Dim int as integer         'Byte Integer Long or Double  (8, 16, 32, 64 bit)

for i = 0 to 4095

    int = i

    Stack(i) = int/256                         'For 8bit  Byte
    Stack(i) = int                             'For 16bit Integer
    Stack(i) = Microsoft.VisualBasic.MKL$(int) 'For 32bit Long
    Stack(i) = Microsoft.VisualBasic.MKD$(int) 'For 64bit Double

    MsgBox(Microsoft.VisualBasic.HEX$(Stack(i))) 'To See Bitwise Length Per Entry

next i
0 голосов
/ 17 апреля 2009

Если вы хотите передать что-то из подпрограммы, вы можете передать это по ссылке - как в «ByRef myParamter as Object».

Лучший ответ в некоторой степени зависит от того, что вы пытаетесь сделать.

0 голосов
/ 17 апреля 2009

Если вы используете VB, единственное, что действительно близко к указателю, это IntPtr . Если у вас есть доступ к C #, вы можете использовать небезопасный код C # для работы с указателями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...