首页 相关文章 Delphi中避免使用ClassName判断对象的类型

Delphi中避免使用ClassName判断对象的类型

  在公司原有系统的代码中,我看到了很多判别对象的ClassName属性进行分别处理的代码。而且似乎已经是处理类似问题的标准方法。但是其中可能会隐含一些问题。

  首先,我们知道多态是面向对象的三大特性之一。所谓多态,其思想就是,对于不同的具体类型,我们可以通过相同的抽象接口进行访问,而不必关系具体类型的实现细节。就像下达通知:所有员工明天9点在人民广场集合。并不需要具体通知每个住在不同位置的人应该几点出发,走什么路线,因为这是具体的人的责任,而非通知下达者的责任。所以,在写到需要判断ClassName进行分别处理的时候,首先应该想到的处理方式是在父类中增加接口,通过子类override完成。如下面改变把图形大小的代码:
   for i := 0 to 图形列表.Count - 1 do
   begin
   图形 := 图形列表[i];
   if 图形.ClassName = '长方形' then
   begin
   长方形(图形).长 := 长方形...[ 查看全文 ]

2016-02-19 标签:
  • 标签:Web开发
    From: JavaEye.com prototype提供了一套JavaScript面向对象基础设施,我们可以使用它来进行面向对象编程,定义对象类型方式如下:  var Person = Class.create(); Person.prototype = {  initialize : function(name, age) {  this.name = name;  this.age = age;  }, ...[ 查看全文 ]
  • Delphi 的VCL技术使很多程序员能够非常快速的入门:程序员门只要简单的拖动再加上少量的几个Pascal语句,呵呵,一个可以运行得非常良好的Delphi程序!恭喜你,你已经可以进行程序开发这个伟大的事业了。不过,当你学了一段时间后也许就不这么想了哦。因为Delphi是支持面向对象的语言,其实所有的VCL Component都是基于面向对象的语言设计的,那么当我们用这些面向对象的东东来设计出一些不怎么面向对象的东...[ 查看全文 ]
  • 标签:Web开发
    在Javascript中 利用 document.selection 可以创建 textRange。 但其实不是什么时候都可以创建的。 我们可以利用 document.selection.type 来判断当前选中的是文本还是对象。 document.selection.type 返回三个值 "None" "Text" "Control" 只有当返回值是 Text 时,创建的textRange才是有效的。[ 查看全文 ]
  • 标签:Web开发
    From: JavaEye.com prototype提供了一套JavaScript面向对象基础设施,我们可以使用它来进行面向对象编程,定义对象类型方式如下: var Person = Class.create(); Person.prototype = {  initialize : function(name, age) {  this.name = name;  this.age = age;  },  toString : function() {  document.writeln("[name]:"+this.name+"br"+"[age]:"+this.age);  } } 先...[ 查看全文 ]
  •   人们在利用Delphi开发数据库应用程序时,经常使用表格控件制作报表。灵活地使用表格控件的OnDrawCell事件,可以完成一些特殊效果的显示,能更好地满足用户需求。本文介绍灵活使用OnDrawCell事件的三个技巧。 动态更新表格行的颜色 有时需要在报表中动态更新表格行的颜色。例如,在供应商列表中,优先供货的供应商用绿色显示,其他的供应商用红色显示。此时可以在OnDrawCell事件中用如下代码实现: i...[ 查看全文 ]
  • 目前XPath2.0还没有正式定稿,因此本文的讨论是基于XPath1.0. XPath支持四种基本类型: 1. Node-set 2. string 3. number 4. boolean 我们知道一个Location Step由Axis,Node Test和Predicate三部分组成,而用于查询XML文档的XPath又是由若干Location Step组成,比如/table/row[id='0000']。在Predicate中几乎总是需要运用=,!=, <Numbers> <Integer value="4" /> <Integer value="2" /> <Integer valu...[ 查看全文 ]
  • 作为一个ASP爱好者,笔者经常在ASP页面中使用ADO对象操作ODBC数据库,觉得用ASP创建WEB应用系统确定挺方便的.虽然在编程生涯中,笔者更喜欢Borland系列产品,对微软产品有点排斥,对ASP却是例外.某天,灵机一动,ADO对象是一个标准OLE对象,如果在DELPHI应用程序中能利用ADO操作数据库,应该挺不错.尤其在用DELPHI做网络数据库应用程序时,如果所在的WEB站点是WINNT站点并且支持ASP页面,就可以用ADO...[ 查看全文 ]
  • 1. 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String("")都是申明一个新的空字符串,是空串不是null; 3. String str="kvill"; String str=new String ("kvill");的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。 常量池(con...[ 查看全文 ]
  • 标签:Delphi
      资源是存放在扩展名.RES的文件里的二进制数据结构,在DELPHI中资源文件可以使用图象编辑器来制作(IMAGEEDITOR),或者使用其他的工具。如:BORLAND公司提供的RADPACKFORDELPHI中的RESOURCEWORKSHOP来创建。资源文件中通常存放的是应用程序可以随时存取的一些对象,包括:ICON、CURSOR、BITMAP、FONT等近十种。大部分的资源在通常的情况下可以保留在磁盘当中,直到程序需要使用它们时才将其调入,...[ 查看全文 ]
  • Delphi是美国Borland公司推出的一个十分优秀的软件开发平台。它以其强大的开发功能在众多的开发环境中独占鳌头,尤其是它在多媒体软件的开发上更是技高一筹。在Delphi的组件板system页上有一个称为MediaPlayer的组件,它是多媒体软件制作的核心,以下将就MediaPlayer 组件的使用作以详解。 MediaPlayer组件主要是用于控制MCI(MediaControlInterface)设备,该组件提供了一系列按钮用于控制诸如...[ 查看全文 ]
  • 对象链接和嵌入(Object Linking and Embeding)是一组服务功能,它提供了一种用源于不同应用程序的信息创建复合文档的强有力方法。 对象可以是几乎所有的信息类型,如文字、位图、矢量图形,甚至于声音注解和录像剪辑等。 Windows附件组中的书写器是应用OLE的实例,使用单击对象 | 插入菜单项, 书写器弹出插入对话框,对话框中列出了多个OLE服务器程序,如公式编辑工具,绘图工具,报表生成工具。用...[ 查看全文 ]
  • 标签:Web开发
    JavaScript中Math对象是是一个固有对象,提供基本数学函数和常数。使用方法: Math.[{property | method}] 其中property是必选项。Math 对象的一个属性名。 method是必选项。Math.对象的一个方法名。 JavaScript中Math对象不能用 new 运算符创建,如果试图这样做则给出错误。该对象在装载脚本引擎时由该引擎创建。其所有方法和属性在脚本中总是可用。 [ 查看全文 ]
  • Delphi的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得Pascal成为Delphi这种先进开发环境的编程语言。 本章中,我们将讨论Object Pascal的主要特点,并讲解如何在事件处理过程和其他应用程序中,使用它来编制程序代码。本章将讲解Delphi应用程序中最常用...[ 查看全文 ]
  • 具体的DLL封装对象请看刘艺的《Delphi中的DLL封装和调用对象技术》及配书源码。 本人在使用DELPHI编制DLL过程中碰到了些奇怪的问题,现在将其列出来,仅供参考: 1、DELPHI生成的DLL工程中写到:ShareMem must be the first unit in your library's USES clause AND your project's。这里提到的是DLL工程和使用该DLL的工程都需要引用ShareMem单元。     ShareMem单元...[ 查看全文 ]
  • 标签:Delphi
      2.1.4 跳转语句 Object Pascal的跳转语句有 if 和 case两个。 2.1.4.1 if语句         if语句会计算一个表达式,并根据计算结果决定程序流程。在上文的例程中,根据 ColorDialog.Execute 的返回值,决定窗体的背景颜色。 if 保留字后跟随一个生成 Boolean 值 True或 False 的表达式。一般用“ = ”作为关系运算符,比较产生一个布尔型值。当表达...[ 查看全文 ]
  • 标签:Delphi
      在编写多线程应用程序时,最重要的是控制好线程间的同步资源访问,以保证线程的安全运行。Win 32 API提供了一组同步对象,如:信号灯(Semaphore)、互斥(Mutex)、临界区(CriticalSection)和事件(Event)等,用来解决这个问题。 Delphi分别将事件对象和临界区对象封装为Tevent对象和TcritialSection对象,使得这两个对象的使用简单且方便。但是如果在Delphi程序中要使用信号灯或...[ 查看全文 ]
  • 标签:Delphi
      Delphi 的编程语言是以 Pascal为基础的。 Pascal 语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件 (.EXE) ,正是这种结合,使得 Pascal 成为 Delphi这种先进开发环境的编程语言。         本章中,我们将讨论 Object Pascal 的主要特点,并讲解如何在事件处理过程和其他应用程序中...[ 查看全文 ]
  • 标签:Delphi
      2.1.8.4 过程和函数的语句部分         过程或函数的语句部分由 begin 开始, end结束。函数需要一个返回值。可以将返回值赋给函数名称,也可以将返回值赋给 Result 变量。下面的例程将返回值赋给函数名称: function CalculateInterest(Principal,InterestRate: Double):Double; begin CalculateInterest := Principal * InterestRate; end; &...[ 查看全文 ]
  • 标签:Delphi
      2.1.10.7 将库单元加入工程         将库单元加入工程是比较简单的。无论是您自己建立的库单元还是 Delphi 建立的与窗体有关的库单元,如果已经完成,则先打开您想加入库单元的工程 ( 可以用 Open Project打开工程 ) ;再选用 File|Open File ,然后选择您想加入的源程序 (.PAS 文件 ) ,并选择 OK 即可。则库单元被加入到应用程序中。 2.2 用 Delphi...[ 查看全文 ]
  • 按照类型名称动态创建对象 作者:死猫 提交者:eastvc 发布日期:2003-9-20 10:22:27 原文出处:http://www.cpphelp.net/issue/classbyname.html 1 引言 我的一个实际项目中,由于希望通过一致的接口控制各种型号的设备,并且可以方便的随时扩充,以便将来支持更多的型号。因此,必须在运行时指定设备的型号。 为了使应用程序可以透明的控制各种型号的设备,所以建立了一个简单的继承体系,设计一个协...[ 查看全文 ]
手机页面 收藏网站 回到头部