Вы не можете сделать указатель на любой данный тип в VB, как в C ++.Однако вы можете обернуть тип значения в ссылочный тип, чтобы получить необходимую семантику.
Public Class Ref(Of T As Structure)
Public Sub New()
End Sub
Public Sub New(ByVal value As T)
Me.Value = value
End Sub
Public Property Value As T
End Class
Это позволяет вам возвращать «указатель» на целое число (точнее, ссылку на что-то, содержащее целое число).Затем вы можете написать что-то вроде этого:
Private RefCount As IDictionary(Of ILifeTimeManaged, Ref(Of Integer))
......... CODE HERE.....
Private Sub IncrementRefCount(ByVal entity As ILifeTimeManaged)
Dim count As Integer
''# if we have no reference entry, add one and set its count to 1
If Not RefCount.TryGetValue(entity, count) Then
RefCount.Add(entity, New Ref(Of Integer)(1))
Else
''# otherwise increment its count by 1
count.Value += 1
End If
End Sub
Вы можете добавить некоторые методы преобразования между T
и Ref(Of T)
в класс Ref
, чтобы возможно упростить синтаксис (как в вызове Add).По моему мнению, это даст вам нечто большее, чем ссылки на C ++, чем указатели на C ++.Независимо от того, хотите вы этого или нет, решать только вам.
Edit RE, ваш Edit: IntPtr предназначен для представления любого типа указателя в вызовах кода взаимодействия.Возможно, лучшим именем было бы NativePtr.Нет никакого способа использовать IntPtr в управляемом коде так, как я думаю, вы хотите, как вы указали бы в C ++.