程序代码:
我不知道怎样改,瞎改了,不要见笑。.A(5),.B(3)次序前后二种情况, 分别调用 my_Container::A(lnTree) 与my_Container::B(lnTree)
frm_Test = CREATEOBJECT("Form")
WITH frm_Test
.AddObject("Container1", "SubContainer")
WITH .Container1
.Arrange
.A(5)
.B(3)
.Visible = .T.
ENDWITH
.AutoCenter = .T.
.Show(1)
ENDWITH
RETURN
* 父類定義
DEFINE CLASS my_Container AS Container
ROWcount = 10
Indexid = 1
ADD OBJECT Label1 AS Label WITH Caption = "", Top = 5, Left = 5, Height = 25, AutoSize = .T.
ADD OBJECT Label2 AS Label WITH Caption = "", Top = 35, Left = 5, Height = 25, AutoSize = .T.
PROCEDURE Arrange
WITH This
.Top = 5
.Left = 5
.Height = ThisForm.Height - .Top - 5
.Width = ThisForm.Width - .Left - 5
ENDWITH
ENDPROC
PROCEDURE A
LPARAMETERS lnTree
IF (PCOUNT() < 1) .OR. (VARTYPE(lnTree) != "N")
lnTree = THIS.Indexid
ELSE
IF lnTree > THIS.ROWcount
lnTree = THIS.Indexid
ENDIF
ENDIF
This.Label1.Caption = "lnTree = " + STR(lnTree,3)
ENDPROC
PROCEDURE B(lnTree)
This.Label2.Caption = "父類中B方法執行的動作"
IF VARTYPE(lnTree) == "N"
*This.A(lnTree) &&去调用A方法
This.Label1.Caption = "lnTree = " + STR(lnTree,3)
ENDIF
ENDPROC
ENDDEFINE
* 派生類定義
DEFINE CLASS SubContainer AS my_Container
PROCEDURE A(lnTree)
This.Label2.Caption = "派生類中A方法執行的動作"
my_Container::A(lnTree) && 直接指定父類中需求執行的事件或方法,不限於本身A方法的父代碼
*DODEFAULT(lnTree) && 只能執行本身A方法的父代碼
ENDPROC
DODEFAULT()
ENDDEFINE
----------------------------------------------------
现在出现
一)当
.A(5)
.B(3)
时
1。my_Container::A(lnTree) 出现lntree=3,父类中B方法执行动作
2、my_Container::B(lnTree) 出现lntree=3,父类中B方法执行动作
二)当
.B(3)
.A(5)
时
1、my_Container::A(lnTree) 出现lntree=5,派生类中A方法执行动作
2。my_Container::B(lnTree) 出现lntree=5,父类中B方法执行动作
问题1.A()与.B()好象调用自定义函数一样,调用A(5)把5给 PROCEDURE A
,调用B(3)把3给PROCEDUREB(lnTree),为什么A(5),B(3)前后写法其结果会出现不同的变化?
问题2。第一种为什么执行的动作会一样?
[
本帖最后由 sylknb 于 2013-1-27 22:59 编辑 ]