VB.NET中C指针的等价物是什么?

VB.NET中C指针的等价物是什么?,vb.net,pointers,Vb.net,Pointers,VB.NET中与指针最相似的东西是什么,意思是类似于C指针 我在一个类中有一个TreeView。我需要公开一些可以被外部对象修改的特定节点(或叶子)。如果使用VB,唯一真正接近指针的就是指针。如果您有权访问C,您可以使用不安全的C代码来执行指针工作。如果您希望从子例程传回某个内容,您可以通过引用来传递它-如“ByRef MyParameter as Object”中所述 最好的答案在某种程度上取决于你想做什么。C#,我也相信VB.Net会在引用的概念上起作用。本质上,它意味着当你说 A=新的A(

VB.NET中与指针最相似的东西是什么,意思是类似于C指针


我在一个类中有一个
TreeView
。我需要公开一些可以被外部对象修改的特定节点(或叶子)。

如果使用VB,唯一真正接近指针的就是指针。如果您有权访问C,您可以使用不安全的C代码来执行指针工作。

如果您希望从子例程传回某个内容,您可以通过引用来传递它-如“ByRef MyParameter as Object”中所述

最好的答案在某种程度上取决于你想做什么。

C#,我也相信VB.Net会在引用的概念上起作用。本质上,它意味着当你说

A=新的A()

“a”是一个引用,而不是实际对象

所以如果我去

B=a

b是对同一基础对象的另一个引用

当您想要公开任何内部对象时,只需公开“属性”即可。请确保您没有为属性提供setter,或者如果您提供了,则有代码检查该值是否合法

当您希望将对象作为参数传递,以及希望被调用的方法能够更改引用(与对象相反)时,将使用ByRef


如上所述,如果您发布一些代码,将更容易解释

Nathan W已经提出了一种可以表示指针或句柄的结构,然而,尽管这种结构是.NET框架的重要组成部分,.NET实际上没有指针,当然也不像C指针

这主要是因为.NET Framework是一个“托管”平台,内存由CLR管理、分配、分配和释放,而开发人员不必担心它(即没有malloc命令!)。这主要是因为这种内存管理,您实际上无法访问直接内存地址

在.NET框架中,最接近的可以被认为是“指针”(但实际上不是指针)的东西是。您可以将a视为“函数指针”,然而,严格意义上它并不是真正的指针。为调用函数添加类型安全性,允许“调用”委托实例的代码确保它使用正确的参数调用正确的方法。这与“传统”指针不同,因为它们不是类型安全的,只引用内存地址

代理在.NET Framework中无处不在,无论何时使用或响应事件,您都在使用代理


如果要使用C#而不是VB.NET,可以编写标记为“”的代码。这允许不安全块中的代码在CLR保护之外运行。这反过来又允许使用“real”,就像C一样,但是它们仍然有一些限制(例如可以在指向的内存地址上)。最好的方法是手动分配所有内容:

您可以随意上下移动每个堆栈,而无需推动或弹出

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

可能需要在For Next子句中的int 0 BETH Stack()&MsgBox中加入,因为除以0是致命的。