大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
结构体无法初始化值,你可以用类实现,或者写一个构造函数,把值传进去。
创新互联公司主营昭阳网站建设的网络公司,主营网站建设方案,app开发定制,昭阳h5小程序开发搭建,昭阳网站营销推广欢迎昭阳等地区企业咨询
Public Structure wheelmodel
Public ID As Short
Public swapway() As Short
Public start As Short
Public Sub New(ByVal Size As UShort) 'Size就是传入的数组的大小
swapway = New Short(Size) {}
End Sub
End Structure
调用的时候:
Dim x As wheelmodel = New wheelmodel(10)
当然可以的,需要System.Runtime.InteropServices 命名空间中的 Marshal 类
Imports System.Runtime.InteropServices '这里一定要有
Public Class Form1
Public Structure m_Point
Dim x As Integer
Dim y As Integer
End Structure
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer = 50
Dim ai() As Integer = {1, 2, 3, 4, 5}
Dim pi As IntPtr = GCHandle.Alloc(i, GCHandleType.Pinned).AddrOfPinnedObject() '取得整形变量的指针
Dim pai As IntPtr = GCHandle.Alloc(ai, GCHandleType.Pinned).AddrOfPinnedObject() '取得整形数组首地址指针
MsgBox(Marshal.ReadInt32(pi, 0)) '读回整形变量指针指向的值
MsgBox(Marshal.ReadInt32(pai, 0 * 4)) '读回数组的第一个元素
MsgBox(Marshal.ReadInt32(pai, 1 * 4)) '读回数组的第二个元素
MsgBox(Marshal.ReadInt32(pai, 2 * 4)) '读回数组的第三个元素
'-----下面是结构--------------------------
Dim m_p As New m_Point
m_p.x = 100
m_p.y = 50
Dim pm_p As IntPtr = GCHandle.Alloc(m_p, GCHandleType.Pinned).AddrOfPinnedObject() '取得结构首地址指针
MsgBox(Marshal.ReadInt32(pm_p, 0 * 4)) '读回结构的第一个值
MsgBox(Marshal.ReadInt32(pm_p, 1 * 4)) '读回结构的第二个值
End Sub
End Class
首先你是怎么重写结构的Sub New的呢?不会有这个错误吗:“结构无法声明没有参数的非共享“Sub New”?
结构是值类型,和类不一样,不一定要有构造函数。直接
Dim B(2) As A
如果有一个含参数的Sub New(i As Integer)
Dim B() As A={New A(1), New A(2)}
有时要初始化很多个的时候可以用循环
Dim c As Integer = 50
Dim B(c) As A
For i = 0 To c
B(i) = New A(i)
Next
不过这样是对变量重新赋值,这种方法用在类上比较好。
看看这个有帮助哦:
Dim wheel2(10) As wheelmodel2
不要用 New
结构体是值类型的,当你定义完数组之后,里面的元素(结构体的实例)就已经使用默认的构造函数初始化了
struct T_ChildStruct
{
int nChildData;
string strChildData;
T_ChildStruct()
{
nChildData = 0;
strChildData = ""; // string可以不用写初始化,本身构造中就有
}
};
struct T_FatherStruct
{
int nFatherData;
string strFatherData;
T_ChildStruct arrChild[10];
T_FatherStruct()
{
nFatherData = 0;
strFatherData = "";
}
};