basic4android 开发教程翻译(七)Basic4android中的对象和类型
2012-02-24 13:53
459 查看
类型
Basic4android的类型系统是直接从Java的类型系统中派生的.
有两种类型的变量: 基本类型 and 非基本类型.
基本类型包括数字类型: Byte, Short, Int, Long, Float 和 Double.
基本类型也包括: Boolean 和 Char.
类型及范围列表: http://www.basic4ppc.com/forum/basic...html#post45511
但函数调用或者赋值时,基本类型总是直接把值传递过去.
例如:
Code:
其他所有的类型,,包括基本类型数组和字符串都被归入到非基本类型.
当你将一个非基本类型传递给函数或者给它赋另外一个不同的值时,会将其的引用复制一份传递过去 .
这意味着数据的本身没有被复制.
这与直接把引用传递过去有点小小不同,因为你不能改变原始变量的引用.
所有的类型都可以被看作是对象.
像lists 和 maps这样的容器工作原理与对象相似,因此可以保存任何值.
下面是一个常见的错误例子, 在这里,开发者试图向列表里面加入几个数组:
Code:
本来希望能够打印出来2. 但是结果确是10.
我们建立了一个数组,并在列表里面加了这个数组的5个引用.
这个数组最后的值在最后的一个循环里面被改为10,因此出错了
要改正这个错误,我们需要在每一个循环里面产生一个新的数组.
这一在每次循环里面调用Dim:
Code:
小贴士: 你可以使用 agraham的 CollectionsExtra 库来复制数组.
转换
Basic4android 当需要时会自动转换类型的. 它也可以自动的将数字转换为字符串,反之亦然.
在很多情况下,你需要显式的转换一个对象成另外一个特定的类型.
这可以通过将一个对象赋值给一个需要类型的变量.
例如, Sender 关键字返回触发这个事件的对象.
下面的代码改变按钮的颜色. 注意有好几个按钮共享同一个事件子程.
Code:
上面的代码也可以写的更优雅点:
Code:
范围
在Sub Globals or Sub Process_Globals 里面定义的变量可以在所有的子程里面访问.
其他的变量是局部的,只能在定义其的子程里面访问.
请参见 Activity lifecycle tutorial 来了解Globals和Process_Globals变量的区别.
提示
所有的views类型可以看成是Views. 这样就可以方便的改变views的公共属性.
例如,下面的代码使 activity的所有直系子view 不可用:
Code:
如果们仅仅想使按钮不可用:
Code:
Type 关键字让你可以建立自己的对象类型. 自定义类型的操作方式与其他非基本类型的操作方式一样.
Basic4android的类型系统是直接从Java的类型系统中派生的.
有两种类型的变量: 基本类型 and 非基本类型.
基本类型包括数字类型: Byte, Short, Int, Long, Float 和 Double.
基本类型也包括: Boolean 和 Char.
类型及范围列表: http://www.basic4ppc.com/forum/basic...html#post45511
但函数调用或者赋值时,基本类型总是直接把值传递过去.
例如:
Code:
Sub S1 Dim A As Int A = 12 S2(A) Log(A) 'Prints 12 End Sub Sub S2(B As Int) B = 45 End Sub
其他所有的类型,,包括基本类型数组和字符串都被归入到非基本类型.
当你将一个非基本类型传递给函数或者给它赋另外一个不同的值时,会将其的引用复制一份传递过去 .
这意味着数据的本身没有被复制.
这与直接把引用传递过去有点小小不同,因为你不能改变原始变量的引用.
所有的类型都可以被看作是对象.
像lists 和 maps这样的容器工作原理与对象相似,因此可以保存任何值.
下面是一个常见的错误例子, 在这里,开发者试图向列表里面加入几个数组:
Code:
Dim arr(3) As Int Dim List1 As List List1.Initialize For i = 1 To 5 arr(0) = i * 2 arr(1) = i * 2 arr(2) = i * 2 List1.Add(arr) 'Add the whole array as a single item Next arr = List1.Get(0) 'get the first item from the list Log(arr(0)) 'What will be printed here???
本来希望能够打印出来2. 但是结果确是10.
我们建立了一个数组,并在列表里面加了这个数组的5个引用.
这个数组最后的值在最后的一个循环里面被改为10,因此出错了
要改正这个错误,我们需要在每一个循环里面产生一个新的数组.
这一在每次循环里面调用Dim:
Code:
Dim arr(3) As Int 'This?call?is?redundant?in?this?case.在这个例子里面,这一句是多余的 Dim List1 As List List1.Initialize For i = 1 To 5 Dim arr(3) As Int arr(0) = i * 2 arr(1) = i * 2 arr(2) = i * 2 List1.Add(arr) 'Add the whole array as a single item Next arr = List1.Get(0) 'get the first item from the list Log(arr(0)) 'Will print 2
小贴士: 你可以使用 agraham的 CollectionsExtra 库来复制数组.
转换
Basic4android 当需要时会自动转换类型的. 它也可以自动的将数字转换为字符串,反之亦然.
在很多情况下,你需要显式的转换一个对象成另外一个特定的类型.
这可以通过将一个对象赋值给一个需要类型的变量.
例如, Sender 关键字返回触发这个事件的对象.
下面的代码改变按钮的颜色. 注意有好几个按钮共享同一个事件子程.
Code:
Sub Globals Dim Btn1, Btn2, Btn3 As Button End Sub Sub Activity_Create(FirstTime As Boolean) Btn1.Initialize("Btn") Btn2.Initialize("Btn") Btn3.Initialize("Btn") Activity.AddView(Btn1, 10dip, 10dip, 200dip, 50dip) Activity.AddView(Btn2, 10dip, 70dip, 200dip, 50dip) Activity.AddView(Btn3, 10dip, 130dip, 200dip, 50dip) End Sub Sub Btn_Click Dim b As Button b = Sender 'Cast the Object to Button b.Color?=?Colors.RGB(Rnd(0, 255), Rnd(0, 255), Rnd(0, 255)) End Sub
上面的代码也可以写的更优雅点:
Code:
Sub Globals End Sub Sub Activity_Create(FirstTime As Boolean) For i = 0 To 9 'create 10 buttons Dim Btn As Button Btn.Initialize("Btn") Activity.AddView(Btn, 10dip, 10dip + 60dip * i, 200dip, 50dip) Next End Sub Sub Btn_Click Dim b As Button b = Sender b.Color = Colors.RGB(Rnd(0, 255), Rnd(0, 255), Rnd(0, 255)) End Sub
范围
在Sub Globals or Sub Process_Globals 里面定义的变量可以在所有的子程里面访问.
其他的变量是局部的,只能在定义其的子程里面访问.
请参见 Activity lifecycle tutorial 来了解Globals和Process_Globals变量的区别.
提示
所有的views类型可以看成是Views. 这样就可以方便的改变views的公共属性.
例如,下面的代码使 activity的所有直系子view 不可用:
Code:
For i = 0 To Activity.NumberOfViews - 1 Dim v As View v = Activity.GetView(i) v.Enabled = False Next
如果们仅仅想使按钮不可用:
Code:
For i = 0 To Activity.NumberOfViews - 1 Dim v As View v = Activity.GetView(i) If v Is Button Then 'check whether it is a Button v.Enabled = False End If Next
Type 关键字让你可以建立自己的对象类型. 自定义类型的操作方式与其他非基本类型的操作方式一样.
相关文章推荐
- basic4android 开发教程翻译(五)Android进程及activitys 生存周期
- basic4android 开发教程翻译(一)建立模拟器和第一个Hello worlrd程序
- basic4android 开发教程翻译(六)使用B4A-Bridge连接你的设备
- basic4android 开发教程翻译(三)IDE 小贴士
- basic4android 开发教程翻译(二)可视化设计与猜数字程序
- basic4android 开发教程翻译(四)调试应用程序
- [翻译]WP 平衡球游戏开发教程(二) -在XNA 渲染Farseer物理对象
- XAF应用开发教程(二)业务对象模型之简单类型属性
- basic4android 开发教程翻译(八)使用ListView
- basic4android 开发教程翻译(九)使用GPS
- XAF应用开发教程(三)业务对象模型之引用类型与关联关系
- 斯坦福大学公开课:iPhone开发教程2010年冬> 各种基础的类,功能,对象和实例的介绍
- windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放
- HealthKit开发教程之HealthKit的主要类型数据
- windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放
- C#开发Unity游戏教程之游戏对象的属性变量
- 微信公众帐号开发教程第2篇-微信公众帐号的类型(普通和会议)
- 【翻译】 Unity3D VR 教程:2.开始进行VR开发
- 用Lazarus进行SQLite3的开发入门教程(翻译|整理)
- [041] 微信公众帐号开发教程第17篇-应用实例之智能翻译