社区
PowerBuilder
帖子详情
关于基类的确认问题
紫焰月读
2003-07-29 02:59:04
现有一自定义类 A, 及一个继承自A的B类, 在将 B 放到窗体上后,若窗体上有若干不同对象,如何可以确定其中的某个对象是继承自 A 类的,请大家不吝赐教
...全文
37
11
打赏
收藏
关于基类的确认问题
现有一自定义类 A, 及一个继承自A的B类, 在将 B 放到窗体上后,若窗体上有若干不同对象,如何可以确定其中的某个对象是继承自 A 类的,请大家不吝赐教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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中加入自说明方法
然后在程序中动态调用,判断返回值
这样应该比较简单
试试看
C++经典资料\虚
基类
与虚函数
虚
基类
与虚函数是C++中面向对象编程的关键特性,它们主要解决多继承带来的
问题
。在C++中,一个类可以作为多个派生类的
基类
,这可能导致同一个
基类
在派生类中出现多次,即所谓的"菱形继承"
问题
。为了解决这种情况下的...
C++虚
基类
详解[可运行源码]
这是因为在虚继承的情况下,编译器不能确定如何调用
基类
的构造函数,因此需要程序员手动指定。 虚
基类
构造函数的调用顺序遵循所谓的“最派生类优先原则”,这意味着在最终派生类中,首先调用的是最深层的虚
基类
构造...
C++多继承与虚
基类
然而,这种特性可能会引发“菱形
问题
”(Diamond Problem),即当一个类同时从两个或更多的类继承,而这些类又共享一个共同的祖先时,编译器无法确定如何正确地调用重叠的成员。为了解决这个
问题
,C++引入了虚
基类
...
pb暂时放弃的漂亮
基类
.rar
标签"PB 漂亮
基类
"进一步
确认
了内容的核心,即与PowerBuilder相关的美观、可复用的代码
基类
。在PowerBuilder中,创建
基类
是为了实现通用功能,如事件处理、错误处理、数据验证等,这样做可以减少代码重复,提高代码...
详解C++中
基类
与派生类的转换以及虚
基类
在C++中,当一个派生类从两个或更多个拥有共同
基类
的派生类继承时,如果没有使用虚
基类
,每个派生类都会包含一份
基类
的副本,这可能导致内存浪费和不确定性。通过声明
基类
为虚
基类
(`virtual base class`),所有...
PowerBuilder
1,109
社区成员
66,453
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章