basic4android 开发教程翻译(七)Basic4android中的对象和类型

类型

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 12End Sub

Sub S2(B As Int)   B = 45End Sub

其他所有的类型,,包括基本类型数组和字符串都被归入到非基本类型.
当你将一个非基本类型传递给函数或者给它赋另外一个不同的值时,会将其的引用复制一份传递过去 .
这意味着数据的本身没有被复制.
这与直接把引用传递过去有点小小不同,因为你不能改变原始变量的引用.

所有的类型都可以被看作是对象.
像lists 和 maps这样的容器工作原理与对象相似,因此可以保存任何值.
下面是一个常见的错误例子, 在这里,开发者试图向列表里面加入几个数组:

Code:

 Dim arr(3) As IntDim List1 As ListList1.InitializeFor  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 itemNextarr = List1.Get(0) 'get the first item from the listLog(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 ListList1.InitializeFor 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 itemNextarr = List1.Get(0) 'get the first item from the listLog(arr(0)) 'Will print 2

小贴士: 你可以使用 agraham的 CollectionsExtra 库来复制数组.

转换

Basic4android 当需要时会自动转换类型的. 它也可以自动的将数字转换为字符串,反之亦然.
在很多情况下,你需要显式的转换一个对象成另外一个特定的类型.
这可以通过将一个对象赋值给一个需要类型的变量.
例如, Sender 关键字返回触发这个事件的对象.
下面的代码改变按钮的颜色. 注意有好几个按钮共享同一个事件子程.

Code:

 Sub Globals       Dim Btn1, Btn2, Btn3 As ButtonEnd 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)   NextEnd 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 = FalseNext

如果们仅仅想使按钮不可用:

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 IfNext

Type 关键字让你可以建立自己的对象类型. 自定义类型的操作方式与其他非基本类型的操作方式一样.

时间: 2024-07-29 03:05:18

basic4android 开发教程翻译(七)Basic4android中的对象和类型的相关文章

basic4android 开发教程翻译(四)调试应用程序

这个教程说明在Basic4android v1.50 后加入的新的调试功能及其他相关的工具. 在Project菜单下有一个叫Attach Debugger的新选项. 如果这个选项是选上的话,那么编译的的代码就会包含调试代码. 调试代码允许IDE 与程序建立连接并检查它的运行. 当程序运行时,首先会等10秒钟与IDE 建立连接. 通常IDE 会很快连接上的. 然而当你手工从电话上运行这个程序时,就会看到这个等待. 编译的APK文件会以 _DEBUG.apk后缀保存.由于这个文件包含调试信息,因此一

basic4android 开发教程翻译(二)可视化设计与猜数字程序

要学习本教程,请先参考下面的教程:安装 Basic4android 和 Android SDKHello world - 安装Android 模拟器 在这个教程里面我们要使用设计器来建立layout. 这个layout包括一个文本框和一个按钮. 用户需要猜一个随机的数字. 用户在文本框里面输入数字并通过点按钮提交猜的数字. 然后系统会通过"toast"信息来给用户提示其输入的数字比系统选择的数字大还是小. - 建立一个新工程并保存它. -选择菜单来打开设计器. 设计器有两部分组成.一部

basic4android 开发教程翻译(五)Android进程及activitys 生存周期

简而言之 : 每个 Basic4android 程序在它自己的进程中运行. 一个进程拥有一个主线程,这个主线程也叫做UI 线程,它会一直运行到进程结束.一个进程也可以有好几个线程,这些线程用来做一些后台工作. 当用户启动一个应用时,一个进程就开始了工作, 假设其并没有已经在后台运行. 进程的结束是不确定的. 有时可能发生在用户或者系统关闭掉所有的activities后. 假设你有一个activity,当用户按了返回键,这个activity被关闭了. 以后当电话的内存不够时这个进程就会退出了(最后

basic4android 开发教程翻译(三)IDE 小贴士

basic4android 的 IDE 功能强大,它帮助你专注于写代码和建立你的应用. 下面列出一些不容易发现的特色: - Ctrl + Space = 自动完成 按 Ctrl + Space 激活自动完成功能,它会把得到的关键字,变量,模块,方法,子程,属性,字段等以列表显示出来 . 并且在很多时候会列出这些项目的描述. 在写了一些字母后按 Ctrl + Space通常会自动出现以这些字母开头的项目. - 工具提示信息 - 当写方法的参数时,工具提示会显示方法的定义和描述. 工具提示有时可能会

basic4android 开发教程翻译(九)使用GPS

GPS在很多Android设备上扮演很重要的角色. 幸运的是可以很方便的使其工作起来. 在这个教程里面我们将完成一个程序,它可以显示当前位置并显示卫星状态. GPS功能被封装在GPS库里面. 因此我们首先要把这个库加入到引用里面: 与其相关的有种类型.最主要的是GPS. GPS管理连接和事件. 第二个是Location. Location是一个结构,它保存着经度和纬度坐标的修正值,还有其它信息,例如方向, 高度等等. 有时出现得不到所有的信息(例如,信号比较弱). Location也包含其他功能

basic4android 开发教程翻译(八)使用ListView

ListView 控件是一个非常强大的控件. 它可以以非常雅致的方式来显示长的或者短的列表. 建立一个ListView 非常简单: Code: Sub Globals Dim ListView1 As ListViewEnd Sub Sub Activity_Create(FirstTime As Boolean)    ListView1.Initialize("ListView1")    For i = 1 To 300       ListView1.AddSingleLine

Android LibGDX游戏引擎开发教程(七) 中文字体的显示和绘制(上)

在字体的显示和绘制中,Libgdx的作者(Mario Zechner,美国人)给我们提供了一个非常好用的工具 --Hiero,那么下面就来看看它具体的使用方法. 一.Hiero工具的使用 1.Hiero工 具的下载地址 开发教程(七) 中文字体的显示和绘制(上)-android 绘制字体"> 2.下载结束后,双击hiero.jar文件打开,我们可以看到Hiero的一些基本功能,相比来说作者做的 还是比较简单易懂的.从界面上知道,它包括很多选项,可以制作特效.改变背景颜色.设置内间距等等,右

Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题     从这篇文章中我们已经了解了微信公众平台消息传递的方式,这种方式有一个先天的缺陷:不同用户的请求都来自同一个微信服务器,这使得常规的Session无法使用(始终面对同一个请求对象,况且还有对方服务器Cookie是否能保存的问题).     这就要求我们自己建立一套独立的对话上下文请求机制.     上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(六)

微信公众帐号开发教程(十) 解析接口中的消息创建时间CreateTime

从微信公众平台的消息接口指南中可以看出,每种类型的消息定义中,都包含有CreateTime参数,它表示 消息的创建时间,如下图所示: 开发教程(十) 解析接口中的消息创建时间CreateTime-create time"> 上图是消息接口指南中4.1-文本消息的定义.注意CreateTime的描述:消息创建时间(整型),重点在于 这是一个整型的时间,而不是我们大家所熟悉的类似于"yyyy-MM-dd HH:mm:ss"的标准格式时间. 本文主要想介绍的就是微信消息接口中