如何根据类的名字来生成对象

2016-02-19 21:31 19 1 收藏

今天图老师小编给大家介绍下如何根据类的名字来生成对象,平时喜欢如何根据类的名字来生成对象的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

有时候我们可能在程序中需要动态去生成一些对象,但我们又不想写大量的case分支语句来实现,而是建一张表,根据类的名称或其他一些索引来生成类的实例——对象。如果你有这方面的需要,本文将会帮助你实现这一目的。在写正文之前首先要引进一个概念,类的变量(自己起的准确不准确无所谓,只大家明白就行啦)。这个类的变量并非我们平时看到的这样的定义如:Edit1:TEdit。这样的定义只是定义了一个对象。如果想定义类的变量,我们需要这样定义,首先要定义一个类型类的类 Type TEditClass=class of  Tedit;这样的话TEditClass就是一个类的类型。我们就可以通过:Var  EditClass:TEditClaa;来定义类的变量了。如果我们想来生成一个TEdit的实例,就可以通过下面这段程序来实现:type TEditClass=class of TEdit;
  procedure TForm1.Button1Click(Sender: TObject);
  var EditClass:TEditClass;
    Edit1:TEdit;
  begin
    EditClass:=TEdit;
    Edit1:=EditClass.Create(self);
    Edit1.Parent :=self;
  end;这段代码也许没什么意义,但如果有大量的对象的时候,这样做的用处就显出来了。那就是可以根据类名或其它的东西来生成类的实例。而不是用大量的CASE语段来判断该生成什么对象。需要注意的是,我上面定了的类之类是TEditClass,如果换成TEDIT的父类也是适用的。 如果把 Type TEditClass = class of TEdit 换成 TWInControlClass = class of TWinControl,程序照样可以正确运行。要想实现标题所提到的想法,我们可以这样实现,构建一张表,其中至少有两个字段,一个索引(比如字符串或整数等等),另一个就是类的变量,当然也可以加其他一些辅助的信息。这要视具体的情况而定。在需要生成对象的时候,我们可以先查找索引,如字符串或整数,再根据索引指向的类的变量来生成实例。使用这种方法一定要注意:定义类的类的时候,这个类要是你需要生成类的父类,并且它们的构造函数的参数完全一样。这种方案可以做为使用工厂模式的一种具体实现方案。工厂类可以不知道自己有多少产品类,产品类自动用工厂类的增加方法来把自己添加到工厂类的产品列表中去。到产出产品对象的时候,工厂类自动根据产品名称来生成产品类。这样可以保证工厂类的绝对稳定性,即新增加产品的时候,工厂类不用做任何改动就可以运行。

来源:http://www.tulaoshi.com/n/20160219/1626409.html

延伸阅读
标签: ASP
  不能ASP图像组件来生成图像的ASP计数器程序 这是我去年编的一个ASP程序,那时用惯了C语言,所以对Basic反而忘了,但由于觉得ASP很热门,所以试着编了这个程序,程序没经过优化,代码很长,主要是数据那时候不知道该怎么用:) 别笑我,因为现在我会用啦!! 这是个简单的计数器申请系统,采用文本,所以只要是支持ASP的空间就都可以测试!! ...
根据情境生成歌单的在线听歌应用:Songza 用手机在线听歌是一件再普通不过的事情,但之类的应用普遍存在的问题是,用户只能自行搜索歌曲,或是使用应用推荐的各种歌单。今天我们要介绍的这款名为Songza的在线听歌应用颇具新意:它能根据不同时间、不同地点、不同情境,随机为用户生成歌单。 打开Songza,可以看到应用下部的5个按钮:...
SqlConnection conn = new SqlConnection();       conn.ConnectionString = "Server=127.0.0.1;User ID=sa;Password=fdahgdrethj31313210212121;Database=northwind;Persist Security Info=True";       conn.Open();  &nb...
初始化类对象 赵湘宁 问题:        C++中如何初始化类中的表数据?在C语言中,我能像下面这样初始化结构数组: //struct MYSTRUCT { int x,y,z;};MYSTRUCT table[] = { { 1,2,3 }, { 4,5,6 }, ... // etc};// ...
上一次在"使用Java开始面向对象的编程"这篇文章中,我们学习了一个编程语言要真正成为面向对象的,它应该支持信息隐藏/封装,多态,继承和动态绑定.另外,我们知道了Java完全支持这些功能,而且知道了因为Java是一种解释性的语言并运行在虚拟机的内部,所以由Java写成的任何程序都可以在任何支持 Java虚拟机(JVM)的操作系统上运行.我们...

经验教程

643

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部