zoukankan      html  css  js  c++  java
  • 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 12
    End Sub

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

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

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

    Code:
     
    Dim arr(3As 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(3As Int 'This?call?is?redundant?in?this?case.在这个例子里面,这一句是多余的
    Dim List1 As List
    List1.Initialize
    For i = 1 To 5    Dim  arr(3As 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, 10dip10dip200dip50dip)
          Activity.AddView(Btn2, 
    10dip70dip200dip50dip)
          Activity.AddView(Btn3, 
    10dip130dip200dip50dip)
    End Sub
     
    Sub Btn_Click
         
    Dim b As Button
         b = 
    Sender 'Cast the Object to Button
         b.Color?=?Colors.RGB(Rnd(0255), Rnd(0255), Rnd(0255))
    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, 
    10dip10dip + 60dip * i, 200dip50dip)
       
    Next
    End Sub 

    Sub Btn_Click
           
    Dim b As Button
        b = 
    Sender
           b.Color = 
    Colors.RGB(Rnd(0255), Rnd(0255), Rnd(0255))
    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 关键字让你可以建立自己的对象类型. 自定义类型的操作方式与其他非基本类型的操作方式一样.

  • 相关阅读:
    Linux高级篇--Linux防火墙
    一、华为模拟器eNSP下载与安装教程
    中继器,集线器,网桥,交换机,路由器有什么区别?//联网用到的硬件简介
    Web前端调试技巧
    疯狂HTML5-CSS3-JavaScript讲义-光盘源码-李刚
    HTML5从入门到精通-电子书和随书光盘
    案例学Web前端开发-电子书和随书光盘
    [转]OpenLayer4地图全屏的实现
    网页开发中使用javascript语言时浏览器操作时弹出错误:Uncaught TypeError: Cannot set property 'onClick' of null。
    java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.h...
  • 原文地址:https://www.cnblogs.com/xalion/p/2366627.html
Copyright © 2011-2022 走看看