Delphi 系统[20]关键字和保留字 automated、private、protected、public、published - 定义类(或结构、对象)成员的可访问类型
时间:2021-08-12
本文章向大家介绍Delphi 系统[20]关键字和保留字 automated、private、protected、public、published - 定义类(或结构、对象)成员的可访问类型,主要包括Delphi 系统[20]关键字和保留字 automated、private、protected、public、published - 定义类(或结构、对象)成员的可访问类型使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Delphi 系统[20]关键字和保留字 automated、private、protected、public、published - 定义类(或结构、对象)成员的可访问类型
1、定义:
- automated :自动成员,它能够使程序的版本向下兼容。ComObj 单元内的成员及其实例不能使用 automated 访问区分符。 不能用于结构类型和对象类型。
- private :私有成员,只有类所在单元可以访问。
- protected :保护成员,只有子类可以访问,不能用于结构类型。
- public :公开成员,可以在任何地方被访问。
- published :发布成员,可以在运行时被访问,不能用于结构类型和对象类型。
2、示例:
type
TMyObject = class
automated
{ 这里放置自动类型的成员 }
private
{ 这里放置私有类型的成员 }
protected
{ 这里放置保护类型的成员 }
public
{ 这里放置公开类型的成员 }
published
{ 这里放置发布类型的成员 }
end;
{ 关于 automated }
type
TMyObject = class
automated
Str:WideString;
end;
{ 如果在程序的下一个版本中, 将 Str 修改成 }
type
TMyObject = class
automated
Str: AnsiString;
end;
{ 则新版本的 Str 变量能够接受旧版本的 WideString 型数据,并自动转换成AnsiString。 在实际开发中,如果没有特殊的需要,一般不用 automated 访问区分符。}
3、关于automated 成员的一些说明:
- automated 成员与public成员具有相同的可见性。区别在于,automated 类型信息(自动化服务器所需)是为 automated成员生成的。
- automated 成员通常只出现在Windows类中,不建议用于Linux编程。automated 保留字是为了向后兼容而保留的。ComObj单元中的TAutoObject类不使用automated。
- 以下限制适用于声明为 automated的方法和属性:automated 方法或属性的声明可以包含dispid指令。在dispid指令中指定已使用的ID会导致错误。
- 所有属性、数组属性参数、方法参数和函数结果的类型都必须是自动的。可自动执行的类型有Byte, Currency, Real, Double, Longint, Integer, Single, Smallint, AnsiString, WideString, TDateTime, Variant, OleVariant, WordBool,和所有 interface 接口类型。
- 方法声明必须使用默认的寄存器调用约定。它们可以是虚拟的,但不是动态的。
- 属性声明可以包括访问说明符(读和写),但不允许使用其他说明符(index索引、stored存储、default默认和nodefault)。访问说明符必须列出使用默认寄存器调用约定的方法标识符;不允许使用字段标识符。
- 属性声明必须指定类型。不允许属性重写。
- 在Windows上,此指令后面必须跟一个整数常量,该常量指定成员的自动分派ID。否则,编译器会自动为成员分配一个调度ID,该ID比类及其祖先中任何方法或属性使用的最大调度ID大一个。有关 Automation自动化的详细信息(仅在Windows上),请参见Automation自动化对象。
创建时间:2021.08.12 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你所有帮助,谢谢!
原文地址:https://www.cnblogs.com/guorongtao/p/15132093.html
- zookeeper学习系列:四、Paxos算法和zookeeper的关系
- 有了phonegap你还android吗?
- zookeeper学习系列:三、利用zookeeper做选举和锁
- Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】
- zookeeper学习系列:二、api实践
- Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】
- Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】
- 困扰我多年的Connection reset问题
- scala学习笔记
- jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www
- 使用 Java Service Wrapper 启动java后台进程服务
- PHP码农在Golang压力下的生存之道-PHP性能优化实践
- golang使用 mongo
- CoreOS Linux引入了Kubernetes kubelet
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android自定义双向进度条的实现代码
- android视频截屏&手机录屏实现代码
- Android自定义组件跟随自己手指主动画圆
- Android RecyclerView 实现快速滚动的示例代码
- Android的八种对话框的实现代码示例
- Android使用RecyclerView实现今日头条频道管理功能
- Liunx(centos8)下的yum的基本用法和实例(推荐)
- Android中LeakCanary检测内存泄漏的方法
- Linux 查看磁盘IO并找出占用IO读写很高的进程
- Android实现简单的拨号器功能
- Android调用系统自带浏览器打开网页的实现方法
- Linux之删除带有空格的文件(不是目录)
- Android自定义AvatarImageView实现头像显示效果
- 如何使用win10内置的linux系统启动spring-boot项目
- Android 实现单线程轮循机制批量下载图片