原文:http://www.cnblogs.com/delphi-xe5/articles/3884154.html

Delphi 中的自定义类笔记(一)

类的声明

有两种声明办法

一、自定义类的父类delphi内建类

type 类名 = class(父类)

成员表达式

end;

(1)保留字Class说明该类是dephi内建类,将继承父类的属性和方法

(2)“父类”默认是delphi的祖先类Tobject

二、完全自定义的类

Type 类名 = object(父类)

成员表达式

End;

(1)       保留字object说明该类是完全自定义的类

(2)       自类也必须是完全自义的类

注意:用class自定义的类必须遵循delphi内建类的Tobject的特定的构造方法和析构方法,而用object自定义类的方法无此限制(内存管理方式),所以用第一种方法生成对象时必须调用Create构造函数,

第二种就不需要,可直接生成对象,它将做为一般变量,和记录(Record)变量相同,用到

时立即分配内存,用完时自动释放内存

自定义Delphi内建类的构造和析构

构造函数

Constructor Create(AOwner :Tcomponent) ;override ;

(1)可以根据实际情况改变参数信息(参数个类,类型,顺序,默认值)

(2)若要继承父类的构造函数,可添加inherited create;

析构函数

Destructor destroy ; override ;

(1)   若在自定类中添加了其它类,一定要记得释放这些对象

(2)   若要继承父类

(3)   值得注意的中destroy中删除对象的变量,即对象的参考,未真正删除对象实体,也就没有释放对象所占的内存,另外,若在没有调用create 的情况下,该对象参考的值为nil,这种情况下调用destroy,会产生错误

Free可解决上面的问题(真正释放内存;在没有创建的对象的情况下调用Free也不会报错)

还有一个更实用的FreeAndNIl(对象),它不仅释放内存,而且将对象的参考(变量)赋nil值

完全自定义类的构造和析构

自定类也完全可以自己编码自己的构造和析构函数,为其分配内存、释放内存,不免要用到指针,是复杂度很高的工程,此时还是用的自定义的Class比较方便。

类的封装

封装的含义:把个别单元(对象和类)的所有数据和功能(成员变量、成员函数、属性)全部包括它的内部。

封装的目的:防止外界去破坏对象内部结构和数据。只有通过对象对外的接口,才能访问对象内部的数据,对象之间也无法直接访问彼此的数据,必须通过某些信息的传递,而这些信息对调用、执行对象内部的方法,或访问对象内部的属性或字段。

封装的方式:delphi中用类(Class)的声明技术。接口部分(interface)用来定义对象外观及对象对外表现的行为,而实现部分(implementation)则用来处理对象内部运行,其内容包括不公开的字段   、方法,甚至属性。

ObjectPascal封装的级别

五个级别

Private

(1)这里声明的类成员(包括字段、方法(类方法))只能在类声明的单元内使用。

(2)子类可以继续父类的private成员,但无法使用这些成员

该部分声明的方法为类方法,也就是说对象无法直接调用

Protected

(1)这里声明的类成员(包括字段、方法(类方法))只能在类声明的单元内使用

(2)子类可以继承父类的protected成员,也可以使用,但也只限于类定义的单元

该部分声明的方法同样为类方法,类的对象也无法直接调用

Public

(1)这里声明的类成员(包括字段、方法(对象方法))可见度最大,可以在类单元及类对象所在的任何单元使用。

Published

(1)   可见度与public一样,

(2)   与public的区别是本区域的成员可以在delphi对象检查器中出现,而此差别来自RTTI机制

RTTI(Run time type Information)是为Published制作它允许应用程序动态查询该类的published的字段、属性(包括属性和事件),并且加载类的方法

RTTI启动条件是有条件的——使{$M+}”编译指令的状态下才能启动RTTI或它的祖先类以上述状态编译,也可以启动RTTI,然后该类检查器才能显示在检查器中。

(3)   除了RTTI条件限制后,published的属性也有类型限制

A. 序数、字符串(string)、class、interface以及mothod—pointer类,都可以做published的属性

B. 范围在0-31之间的集合,该集合值必须满足byte、word或double word类才能做published属性

C. 除了Real类外的所有实数类,都可以做为published属性

D.数组类不可以做published属性

E. 所有的成员函数都可以作为published的事件,然而重载override的函数不可以作为published事件

F. 字段Fieled不能作为Published的属性,除非它属于class或interface类

Automated

(1)   可见度与Public成员一样

(2)   与public差别和public与published差别相似,当我们使用自动化服务器(Automation server)时,“Automation Type information”是为auomated成员设置。而所有的Automatic成员只能出现在OleAuto单元,继承自TAutoObject的类里面,且OleAuto单元原本就有默认的Automated区,至于comObj单元,则无法具有Automated

转载于:https://www.cnblogs.com/chuangyiyuan/p/6476142.html

DELPHI 中的自定义类笔记(一) OBJECT 创建类 不用 CREATE 【转】相关推荐

  1. Python基础笔记_Day12_Python元类、type动态创建类、Python动态创建方法、Python运算符、Python发邮件、短信

    Day12_Python元类.type动态创建类.Python动态创建方法.Python运算符重载.Python发邮件.短信 12.01_Python语言基础(类对象)(熟悉) 12.02_Pytho ...

  2. python在子类中添加新的属性_python - 如何创建类属性?

    python - 如何创建类属性? 在python中,我可以使用@classmethod装饰器向类添加方法. 是否有类似的装饰器向类中添加属性? 我可以更好地展示我在说什么. class Exampl ...

  3. 在Angular 8中使用自定义MultiSelect下拉菜单创建动态行

    目录 介绍 如何工作? 先决条件 使用代码 第1步 第2步 第3步 第4步 第5步 第6步 第7步 第8步 第9步 第10步 第11步 结论 介绍 在本文中,我们将学习如何使用Angular 8创建动 ...

  4. python 类构造函数_Python构造函数创建类对象

    python 类构造函数 In the last tutorial, we learned how to create a class, its instance and how to access ...

  5. python中加等是什么意思_Python创建类的时候,加()和不加有什么区别、联系?

    在Python中定义类class的时候,可以加上(): class Employee(): """这里是Employee的__doc__""" ...

  6. 【C++学习】对私有构造析构函数的思考:new一个类对象vs直接创建类对象

    前置知识: new的类对象需要手动delete.且使用堆空间.且只能用指针接收. 直接创建的类对象创建在栈中(或说堆栈).不需要手动delete,随着生存周期的结束(如所在的函数return了)而释放 ...

  7. delphi 自定义控件_Delphi中的自定义组件开发

    delphi 自定义控件 Components are essential elements of the Delphi environment. One of the most important ...

  8. 创建类模式(读书笔记)

    最近在读秦小波写的设计模式之禅这本书,创建类模式读完了,现在做一个读书笔记总结.创建类模式包括单例模式.原型模式.工厂方法模式.抽象工厂模式.建造者模式,它们都能提供对象的创建和管理职责. 单例模式( ...

  9. (转)剖析Delphi中的构造和析构

    剖析Delphi中的构造和析构 1 Delphi中的对象模型: 2 1.1 对象名表示什么? 2 1.2 对象存储在哪里? 2 1.3 对象中存储了什么?它们是如何存储的? 3 2 构造函数与创建对象 ...

最新文章

  1. 李洪根关于[SQL]对于分页存储过程
  2. java readline读取最后一行_java的转换流解析
  3. Horspool 字符串快速查找算法
  4. 线段树-HDU5737-这题有点神
  5. Java读取properties配置文件时,中文乱码解决方法
  6. java 程序更新_如何关闭JAVA更新程序
  7. windows常见快捷键
  8. 彻底分析ARP病毒查杀防范全攻略
  9. caffe手写数字分类-学习曲线
  10. 哈理工OJ 1029 Function Run Fun(记忆思想)
  11. 易语言变量和c对应关系,详解易语言变量用法和原理
  12. navicat 注册过程
  13. oracle数据库提示ORA-01033
  14. Android 各版本gradle下载地址
  15. 可部署于windows和Linux的即时通讯系统
  16. activemq 简介 配置
  17. 北京林业大学计算机考研录取分数线,北京林业大学信息学院计算机技术(专业学位)专业考研招生人数 考研报录比 考研复试分数线 考研辅导.pdf...
  18. JavaScript-标签语句
  19. 自律努力有目标的人生有多美
  20. 深度学习训练经验之迭代次数与准确率之惑

热门文章

  1. HOW TO: Troubleshoot development errors in MOSS 2007
  2. python中按照文件夹中文件的排列顺序读取文件内容
  3. object类型replace掉$、转换成float、运算
  4. lecture 5:Policy Optimization 1
  5. PowerDesigner--创建概念数据模型;并生成逻辑数据模型/物理数据模型/数据库SQL脚本
  6. Uniswap 24小时交易量12.5亿美元,占以太坊上Dex总量的50.05%
  7. 今日恐慌与贪婪指数为77 贪婪程度有所上升
  8. Futureswap公布代币分配时间表,在未来3年向用户分配3000万枚FST代币
  9. TokenInsight:BTC网络活跃度保持历史高位,人气居高不下
  10. 跨链项目Cosmos主网升级提案已开启投票 目前投票率为19.10%