关于数组的问题

wyvernwhite 2002-11-01 02:20:21
在VB.NET中声明数组时,这两种方式有什么区别:
Dim a() As Integer
Dim a As Integer()

还有就是在使用GDI+的PathGradientBrush时,它的SurroundColors参数需要一个颜色数组,为什么像下面这样的赋值方法行不通:(假设PBrush为已经创建好的PathGradienBrush)

Dim SColor As Color=Color.FromArg(255,123,44,32)
PBrush.SurroundColors(0)=SColor

而只能像这样:

Dim SColor As Color()={Color.FromArg(255,123,44,32)
PBrush.SurroundColors=SColor

...全文
55 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyvernwhite 2002-11-16
  • 打赏
  • 举报
回复
多谢
sumtec 2002-11-14
  • 打赏
  • 举报
回复
你的第二个问题其实就是上面说到的Function a(...) As Integer()的问题。
由于这个SurroundColors属性其本身不是一个数组,他的类型是Color()。或者我讲这个属性大概展现一下:

Public Property SurroundColors As Color()
Get
Return m_SurroundColors
End Get
Set (ByVal Value As Color())
m_SurroundColors = Value
End Set
End Property

从中看出,传递的过程(无论传入或是传出),都是将传递的数据看成一个整体而不是一个个单独的元素来看待的。这个我觉得跟前面说得Dim a() As Integer 和 Dim a As Integer() 有什么区别没有关系,这个主要是由于Property的实现机制引起的。(也可能有一点吧。我也不是很清楚。)
sumtec 2002-11-14
  • 打赏
  • 举报
回复
本来我觉得这两种写法应该有点区别才对,我认为对于
Dim a() As Integer
内存分配应该是
[ ] [ ] [ ] ...
^
|
常量地址 (假设0x12345678)


比如
a(0) = 1
对应的asm应该类似为:
MOV SI, 0x12345678
MOV DWORD PTR [SI + 0], 1

或者换句话说,a本身不占用空间。

对于
Dim a As Integer()
内存分配应该是这样的:
[ ] [ ] [ ] ...
^
|
[ ] <- a 这个变量占用空间,指出数组所在位置。(假设地址为0x12345678)

同样的a(0) = 1应该为:
MOV SI, [0x12345678]
MOV DWORD PTR [SI + 0], 1

但是后来看到在使用上没有区别,觉得可能是CIL没有第一种机制,都是用的第二种,于是我没有继续深究下去。反正我觉得你就记住一点,没有根本的区别。

但是小的区别还是有的。最主要的一个作用是,对于a这个变量的类型,应改为Integer(),或者说,可以使函数能够返回数组。
Function a(..) As Integer()

关于第二个问题,我过一会儿再答复。(仔细看看,不要回答错了误人子弟啊!)

kuailexq2000 元老 2002-11-13
  • 打赏
  • 举报
回复
GrilFriend?
I want see photo?!
sumtec 2002-11-13
  • 打赏
  • 举报
回复
明天帮你解决,今天不行了,GF催我走了……Sorry……Appologies
wyvernwhite 2002-11-06
  • 打赏
  • 举报
回复
但我用这样赋值时:
PBrush.SurroundColors(0)=SColor
申明的SColor不是数组啊
jhshen 2002-11-05
  • 打赏
  • 举报
回复
PBrush.SurroundColors是个数组,SColor也是个数组,赋值当然可以。
而PBrush.SurroundColors(0)=SColor企图把一个数组赋值给一个数组中的元素,当然不行了

16,718

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧