关于基类的确认问题

紫焰月读 2003-07-29 02:59:04
现有一自定义类 A, 及一个继承自A的B类, 在将 B 放到窗体上后,若窗体上有若干不同对象,如何可以确定其中的某个对象是继承自 A 类的,请大家不吝赐教
...全文
37 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫焰月读 2003-07-29
  • 打赏
  • 举报
回复
eminena 说的我查了一下, 可惜帮助中不是很明白说明用法, 感觉此方向是正确的.
Hanson_bati_zhu 的做法如果没有上述办法, 也是个不错的选择, 唯一不方便的就是每个类都要注册一下(就是把自己属性写入 is_ClassInfo[] 表中.
bapi 把代码也放出来了, 让我们一目了然, 确是非常感谢, 要知唾手可得的答案是最有助于快速学习了, 在此谢谢大家的帮助.
上面的代码有几处笔误, 我再整理如下, 变量命名纯为个人偏好, 莫怪莫怪:
/////////////////////////////////////////////////////////////////////////////
//
// 功能:检查对象 arg_object 的继承链中是否有一个名为 arg_ancestor 的祖先
// 参数:
// 传值方式 类型 名称
// ReadOnly PowerObject arg_Object
// Value String arg_Ancestor
//
// 返回值: true - 存在中 false - 不存在
//

ClassDefinition mClassDef

If Not IsValid( arg_Object ) Or IsNull( arg_Object ) Then Return False

mClassDef = arg_Object.ClassDefinition

Do While IsValid( mClassDef )
If Lower( mClassDef.Name ) = Lower( arg_Ancestor ) Then Return True
mClassDef = mClassDef.Ancestor
Loop

Return False
bapi 2003-07-29
  • 打赏
  • 举报
回复
/*
功能:检查对象apo_Object的继承链中是否有一个名为as_Ancestor的祖先
参数:<PowerObject>: apo_Object
<String>: as_Ancestor
返回:true/false
*/
ClassDefinition lcd_Def
Boolean lb_Result

if not isvalid( apo_Ojbect ) or isnull( apo_Ojbect )then return False

lcd_Def = apo_Ojbect.ClassDefinition
do while isvalid(lcd_Def )
if Upper( lcd_Def.Name) = Upper( as_Ancestor ) then
lb_Result = True
exit
end if
lcd_Def = lcd_Def.Ancestor
Loop


return lb_Result
heliang 2003-07-29
  • 打赏
  • 举报
回复
faq 中有类的 ancestor 属性的用法。
erigido 2003-07-29
  • 打赏
  • 举报
回复
学习
runsoft 2003-07-29
  • 打赏
  • 举报
回复
好题,学习
Hanson_bati_zhu 2003-07-29
  • 打赏
  • 举报
回复
to: eminena
还望能明述
多谢了
eminena 2003-07-29
  • 打赏
  • 举报
回复
用类的 ancestor 属性,求祖先对象的类定义信息.
Hanson_bati_zhu 2003-07-29
  • 打赏
  • 举报
回复
偶的这个办法比较蠢的说
建议你再等等
说不定别人有更好的办法捏
Hanson_bati_zhu 2003-07-29
  • 打赏
  • 举报
回复
倒~~~
够麻烦的哦
呵呵

你试试看
在ClassA里面定义一个示例变量,是一个字符串数组,比如STRING is_ClassInfo[]
然后在ClassA的Constructor事件中写
is_ClassInfo[UpperBound(is_ClassInfo) + 1] = 'This is CLASS A'

在ClassA中写入一个函数,比如of_GetClassInfo,它有一个传入的引用型(Reference)的变量,是一个字符串数组,比如as_ClassInfo[]
程序为:
as_ClassInfo = is_ClassInfo

然后在继承的ClassB、ClassC。。。ClassN中的Constructor事件中均写入类似的代码,只不过把'This is CLASS A'改为'This is CLASS B'、'This is CLASS C'。。。'This is CLASS N'

然后
当你需要获取当前类对象的继承关系时,只需要通过动态调用该类的of_GetClassInfo函数,

比如
STRING ls_ClassInfo[]
lnv_ClassC.Dynamic of_GetClassInfo[ls_ClassInfo]

通过判断传入的参数中的值来获取当前的继承层次,比如ClassC,他的继承关系为:
ls_ClassInfo[1] = 'This is CLASS A'
ls_ClassInfo[2] = 'This is CLASS B'
ls_ClassInfo[3] = 'This is CLASS C'

如果这个对象只是通过NonVisibleObject建立,或者没有of_GetClassInfo函数,则传入的参数不会发生改变

不知道这个办法是否可以解决你的问题
紫焰月读 2003-07-29
  • 打赏
  • 举报
回复
谢谢 Hanson_bati_zhu.
不过还不是很明白, 是否是调用自说明方法并判断返回值呢
这里作为自定义的类,其基类为nonvisualobject 或 userobject, 这是PB规定的
以下这个图说明之间的关系
nonvisualobject( userobject )

┕ ClassA

┕ ClassB

┕ ...

┕ ClassN

我想在任何时候给出一个对象,这个对象可能为上述关系中的某个类,也可能不是,我想得到的是,如果此对象为 ClassN 的实例, 可以得到 ClassN 属于(基于) ClassB 或 ClassA 或 nonvisualobject( userobject ) 的结果.是返回真,否返回假。
对象在运行时我是通过 Control[] 得到的,此时不能确定其类型。该如何做呢?
Hanson_bati_zhu 2003-07-29
  • 打赏
  • 举报
回复
在类A中加入自说明方法
然后在程序中动态调用,判断返回值
这样应该比较简单
试试看

1,109

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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