关于Delphi多态性的提问,有些问题没搞明白(100分)

  • 主题发起人 主题发起人 mikecool
  • 开始时间 开始时间
M

mikecool

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我在写一些小东西,碰到了一个关于OOP的问题
希望大家能帮我解答一下
我编写了一个类,目的是读出一些控件的数据然后自己动态生成这些控件
控件的大致类型有几种,Image Edit Label,位置和大小字体等都好处理
但是就是在数据部分出现了难题,如果在我的类里面想设立一个属性
这个属性当需要他输出Label的时候是string,需要输出到Image是TPicture
内部和外部的接口如何定义,希望大家指点一下

如果很好的答案,我会加分的:)
 
使用类指针;
在确认后再赋值为相应的类;

或者使用Variant类型。
 
Variant如何使用,我看帮助没有得到满意的答案,手头的资料又老最新的只是
Delphi3的

还有类指针怎么用,说说清楚嘛Soul大虾,最好有个例子,只要定义部分和转换
部分就可以了,劳烦大家了
 
可惜我不懂OOP:(
 
TStream.ReadComponent应该能够读出你说的几个控件的所有的Published的信息.
 
>>这个属性当需要他输出Label的时候是string,需要输出到Image是TPicture

你怎么告知这个类需要输出什么呢?这与如何实现这一功能很有关系.
 
:千中元
谢谢你喽,以后别的问题一定会帮上我的:)

:huizhang
会长大哥,我的意思是想在我自己定义的一个类里面设定一种数据类型或者一个函数
接口让外部的程序可以通过其得到特定的类型的数据,要读数据的是外部的控件

:DelphiFan
我这个类在生成的时候就是设定了需要告知的类型,处理以后再返回数据,让窗体来
处理控件的生成和付值不知道这样是否违反了OOP思想?

我用了一些别的方法可以解决,我这次作的东西就是从别人哪里接手的,原来的写得
很漂亮,功能基本可以实现,是一个大系统的一部分,需要剥离,写的有些凌乱。所
以这次趁这个机会好好研究一下OOP写点自己的东西。我就想都是对象化的好一些,
所以提问:)不过会长提到的TStream的这种用法到是提醒了我,不知道我可不可以定
义一个TStream数据在我的Class里面,然后直接用Stream传递数据到Class外部的
控件和程序?
 
参考一下Image类控件的Assign方法,看看他是如何区别不同类型的.
 
嘿嘿,这个问题用Visitor pattern解决极好

 
assign是基于继承的。string和TPicture一个是数据,一个是类用Assign肯定不行
而且这样做还有一个大毛病就是可能因为类型不匹配,通不过语法检查。
oleVariant,Variant中基本包含了所有的可能性,而且编译器对他做的运行是检查
在编译时不检查。比较起来,使用Variant应该合理一些。
 
smartkid 好久不见,不知安好?
Visitor pattern是什么东西,帮忙解释一下,见识少没见过:(

soul
非常感谢,我去试试看,不知道把编译器的类型测试关了有没有用?
 
指的是面向对象设置的一个基本范式,
也就是一种思路,呵呵
可以在www.modelmaker.com找到
 
我有类似的问题,还没有结帐。
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=231842
 
作为一个属性"即可以输出字符串又可以输出图像的类",这种做法没有任何好处,只能
引起混乱。
比较好的办法是输出一个TObject,然后目标程序根据它的ClassType去判断并且得到
他所需要的数据。目标程序可以使用 is 来判断所得到的类是什么,然后作相应的处
理。
 
呵呵,我对大家的解答已经非常满意了,准备发分了

Huizhang大哥的解答已经让我进一步了解了有关方面的知识,也是我看到了这种方法
的不严谨,已经促使我修改了原来的定义,非常感谢

Soul我试验过了Variant不能用,不能赋给他TPicture类型的值,你说的类指针我不是
很明白,希望能够进一步说说清楚:)

Smartkid老大的回答很精妙,我去看了那个网站,感觉一头雾水,可能理解能力欠缺,还
没有达到那个地步,不过非常感谢,我想以后一定能够,用的上的,以后也要多多关照呀

cAkk大侠的方法好像也不行,呵呵,也许是我水平低没试出来,下次我仔细看看

这次听众就发5分来感谢大家不让他沉底:),这里是100分,分别发给4位听众和会长:)
我再发150分给另外三位希望能够满意
 
Soul Smartkid cAkk 给你们的分在这里:)每人50分
请笑纳!
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=239895
 
多人接受答案了。
 
后退
顶部