社区
Delphi
帖子详情
疑问:通过类名创建对象??
wasay007
2003-10-20 02:26:03
请问各位:
怎样用类名动态创建对象呀?
...全文
219
11
打赏
收藏
疑问:通过类名创建对象??
请问各位: 怎样用类名动态创建对象呀?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tigerhohoo
2003-10-20
打赏
举报
回复
TButtonClass = class of TControl;
procedure TForm1.RadioGroup1Click(Sender: TObject);
const
BUTTONS : array[0..2] of TButtonClass = (TBitBtn, TButton, TSpeedButton);
begin
CreateButton( BUTTONS[ RadioGroup1.ItemIndex]);
end;
procedure TForm1.CreateButton(ButtonClass : TButtonClass);
var
AButton : TControl;
begin
AButton := ButtonClass.Create(Self);
AButton.Parent := Self;
...
end;
wasay007
2003-10-20
打赏
举报
回复
类名是字符串形式的,怎么创建啊?
Linux2001
2003-10-20
打赏
举报
回复
你所谓的类名是什么,如果不是字符串形式那么很容易解决,如果是字符串形式,恐怕只有使用比较BT的方法了!不过仍然很Easy
superyys
2003-10-20
打赏
举报
回复
我贴错地方了,,,在这里有完整的
http://expert.csdn.net/Expert/TopicView3.asp?id=2374764
superyys
2003-10-20
打赏
举报
回复
参考
1. Herb Sutter. Exceptional C++. Addison-Wesley, Reading, MA. 1999.
侯捷.《Exceptional C++中文版》.培生教育出版集团.2000.
2. 虫虫.《天方夜谭VCL:多态》.C++ View.2001,10.
3. 侯捷.《深入浅出MFC》,2/e.松岗电脑图资料股份有限公司/华中科技大学出版社.1997/2001.
4. 虫虫.《天方夜谭VCL:开门》.C++ View.2001,9.
5. Scott Meyers. More Effective C++. Addison-Wesley, Reading, MA. 1996.
侯捷.《More Effective C++中文版》.培生教育出版集团.2000.
6. GoF. Design Patterns: Elements of Resuable Object-Oriented Software. Addison-Wesley, Reading, MA. 1995.
李英军等.《设计模式:可复用面向对象软件软件的基础》.机械工业出版社.2000.
superyys
2003-10-20
打赏
举报
回复
天方夜谭VCL: 生死
虫虫
生命是什么?科学和宗教都给出了不同的诠释。有句话也许说得更有意思:生命是这样一种东西,如果你把它当作一个开场或结局,那么它总是一样的;而当你把它当作一个过程,它总是不同的。其实,万事万物又何尝不是分别以生和死作为开场和结局呢?对象也不例外,不过生成以及销毁对象都需要健全的机制作保证。否则不仅对象本身遭殃,甚至会导致程序乃至整个系统崩溃。
传说中,东方的天、人、阿修罗、畜生、饿鬼、地狱六道轮回(以及由此演变出的丰都鬼城),和西方的地狱、炼狱、天堂,都有一套非常完整、严密、健全的机制,管理着时空中各种生命体。同样,一套框架也需要这么一套机制来管理记忆体中的对象,以保证正常运作。VCL自然也不例外。但虫虫这次并不准备详细分析涉及VCL对象生死的代码,相信大家对剖析涉及底层汇编都有了一定的经验。所以前面虫虫会对这方面提几句,把重点放在设计的结构和模式上,并解决一个在BBS上看到的问题。
对象生成
对象生成的方式几乎都是一样,一般流程如右图所示(VCL类的初始化是指初始化VMT和接口指针)。对象一般生存在两个地方,栈(stack)或自由存储区(free store)[1]中。由于Object Pascal只支持第二种方式,所以VCL类都在自由存储区中,表现在C++中就是必须使用new和delete分配、回收空间,速度自然会比存在于栈中的普通C++类要慢一些。
控制VCL对象生成过程的代码主要在TObject::InstanceSize、TObject:: NewInstance、TObject::InitInstance几个成员函数中。有兴趣的朋友可对照右图分析一下,源代码在 Source/Vcl/system.pas里,没有什么特别之处。我们将把重点主要放在分析动态生成(Dynamic Creation)机制上。
动态生成是一个相当实用的技术。比如上次我们提到的一个绘制图形的程序[2],具体的图形以插件的方式提供,主程序对相应的图形类一无所知,但是仍然需要 “动态”地生成这些对象。又比如Delphi/C++ Builder的IDE对象设计器,也是一个很好的例子:鼠标双击,一个对象就动态生成在设计面板,可以供我们设计之用了。C++语言本身并没有也不可能提供对动态生成的支持,不过MFC中用宏(macro)模拟就可以取得令人满意的效果[3]。
图1 对象生成流程
34535345345345345345
2003-10-20
打赏
举报
回复
可以告诉你,基本上无解。
即使解决了,也是非常规途径(用RegisterClasses)。
这个问题涉及到编译器的问题了
angle097113
2003-10-20
打赏
举报
回复
var
from1:Tform1;
begin
form1:=Tform1.Create(self);
form1.showmodal;
end;
zhaojinghui
2003-10-20
打赏
举报
回复
up
pankun
2003-10-20
打赏
举报
回复
你这个类要从TPersistent继承才行,才有RTTI支持.
再用GetClass(类名)
wasay007
2003-10-20
打赏
举报
回复
大虾们,有谁知道吗
Java8中直接new对象和用
类名
::new
创建对象
这两种形式有什么区别
但是里面涉及到的java8知识不懂,就感觉很别扭,于是就开始研究java8),在看到 构造方法引用 相关的知识时,看到了一个别人问的问题Java8中直接new对象和用
类名
::new
创建对象
这两种形式有什么区别吗?一直想不明白...
c# 工厂模式
类名
转对象
方式一:通过
类名
来生成对象(优势:方便;劣势:不能以递增方式增加需转化成对象的类文件,即每次发布需整个项目重新编译)经测试正确 public class FruitFactory { public IFruit MakeFruit(string Name) ...
java中Class对象获取方式:
类名
.class, class.forName(), getClass()区别
从某种意义上来说,java有两种对象:实例对象和Class对象。每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI...
关于类的学习总结
一,基础知识 1,类的定义(PS) 概念:类是对具有相同属性和行为的一组对象的抽象与统一描述。是用户自定义的数据类型,包括行为和属性两个部分,属性以数据表示,行为通过函数实现。 (1)定义格式class
类名
{...
Java
疑问
解答第一篇:类体中可以
创建对象
并调用方法吗
问题描述:有伙伴问我,本类体中可以
创建对象
并调用方法吗?答案是可以的,不仅能在本类中操作,还能在其他类中操作(需导入相应的包)解释如下: 我们先来看一个例子: package study; /** * * @author 黑大帅 ...
Delphi
5,379
社区成员
262,722
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章