Delphi编译器属性(特别修饰符Ref,Unsafe,Volatile,Weak)
1 Ref
delphi中常量参数就像一个本地常量,或者说只读变量。常量参数与值参数类似,除了不能在过程或函数体内给常量参数赋值,并且不能将常量参数传给另一个var类型参数。(但是,如果你常量参数传递的是一个对象引用,你还是可以修改这个对象的属性的)
使用const使得编译器能够为结构体和字符串类型的参数优化代码。而且它也提供了一种保护,防止无意中传递了一个参数引用到其他过程。
常量参数可能以值方式或引用方式传递到函数,这依赖于使用的编译器。如果要强制编译器使用引用方式传递常量参数,你可以对const关键字使用 [Ref] 修饰符。该修饰符即可以在const前面,也可以在const后面。
例如:
function FunctionName(const [Ref] parameter1: Record1Name; [Ref] const parameter2: Class2Name);
2 Unsafe
用来标记返回值Result以使编译器对它停用自动引用计数(ARC)。
[Result: Unsafe] function ReturnUnsafe: TObject;
除了System单元外,在非常罕见的情况下也可以用来修饰参数或成员变量。但是不推荐这样使用,因为它没有产生引用计数相关代码,是危险的。
3 Volatile
用来标记变量、参数、字段成员可能被另一个线程修改,所以不对它产生寄存器或临时内存位置的副本优化。
type
    TMyClass = class
    private
        [volatile] FMyVariable: TMyType;
    end;
4 Weak
声明弱引用。
type
  TComponent = class(TPersistent, IInterface,
    IInterfaceComponentReference)
  private
    [Weak] FOwner: TComponent;
--------------------- 
作者:tht2009 
来源:CSDN 
原文:https://blog.csdn.net/tht2009/article/details/50465324 
版权声明:本文为博主原创文章,转载请附上博文链接!
Delphi编译器属性(特别修饰符Ref,Unsafe,Volatile,Weak)的更多相关文章
- 参数修饰符ref,out ,params的区别
		
参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧, ...
 - c#.net中参数修饰符ref,out ,params解析
		
params ============================================================================================= ...
 - c#参数修饰符-ref
		
ref 关键字通过引用传递参数. 方法定义和调用方法必须显式使用ref关键字: 调用方法时参数必须初始化: 参数中可以声明多个ref修饰的参数. 例: public void UseRef( ref ...
 - 嵌入式C语言4.2 C语言内存空间的使用-指针与修饰符:const,volatile,typedef
		
const:变量,只读[不能变] 内存属性: 1. 内存操作的大小 2.内存的变化性,可写可读 char *p; const char *p; 描述字符串,p指向的内容是只读的,不可再次修改 ...
 - __weak 修饰符
		
在 HAL 库中,很多回调函数前面使用__weak 修饰符,这里我们有必要给大家讲解__weak 修饰符的作用. weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一 ...
 - C#类的访问修饰符
		
默认情况下,类声明为内部的,即只有当前工程中的代码才能访问它.可以用internal访问修饰符关键字显式指定,但这不是必须的,类在定义时默认为此类型的类.但是C# 方法默认访问级别: private. ...
 - C#类、方法的访问修饰符
		
这篇文章主要介绍了C#类的访问修饰符用法,较为详细的分析了C#类的访问修饰符概念与用法,具有一定的参考借鉴价值,需要的朋友可以参考下 本文详细分析了C#类的访问修饰符用法,分享给大家供大家参考.具体用 ...
 - C#之out修饰符、ref修饰符、params修饰符的简单介绍
		
一.out修饰符 1.调用一个带有输出参数的方法也需要使用out 修饰符,但是作为输出变量传递的本地变量在将他们作为输出变量传递前不需要赋值(因为调用后会改变或丢失),编译器允 许 ...
 - Python学习:17.Python面向对象(四、属性(特性),成员修饰符,类的特殊成员)
		
一.属性(特性) 普通方法去执行的时候,后面需要加括号,特性方法执行的时候和静态字段一样不需要不需要加括号. 特性方法不和字段同名. 特性方法不能传参数. 在我们定义数据库字段类的时候,往往需要对其中 ...
 
随机推荐
- 下板不动, 上板匀速平板间流动(Crank-Nicolson格式)【转载】
			
摘自<FLUENT流体工程仿真计算实例与分析>,程序略有修改 两个间距为1cm水平平板,如下图所示: 上板匀速平板间流动(Crank-Nicolson格式)[转载]"> 充 ...
 - debian、ubuntu安装metasploit通用方法
			
网上有很多方法让去github上下载安装,这方法的确可以但是特别慢,更新也特别慢,这里写下比较快的方法 1.添加kali源 vim /etc/apt/sources.list 在原有源的基础上添加国内 ...
 - [go]grpc远程接口调用实现
			
// grpc序列化/反序列化成对应语言的对象 // 1.写idl(数据类型+方法) // 2.生成对应语言的序列化/反序列化代码 // 3.方法需要自己实现 // 环境(将gopath/bin加入p ...
 - Flask中current_app和g对象
			
Flask零基础到项目实战(七)请求方法.g对象和钩子函数 一.get方法 二.post方法 post请求在模板中要注意几点: input标签中,要写name来标识这个value的key,方便后台 ...
 - 实时流Streaming大数据:Storm,Spark和Samza
			
当前有许多分布式计算系统能够实时处理大数据,这篇文章是对Apache的三个框架进行比较,试图提供一个快速的高屋建瓴地异同性总结. Apache Storm 在Storm中,你设计的实时计算图称为top ...
 - 增加github访问速度
			
转自:https://blog.csdn.net/qq_38977097/article/details/80770987 原因 为什么慢?github的CDN被某墙屏了. 解决方法 绕过dns解析, ...
 - MySQL 查询某个数据库中所有包含数据记录的表名
			
MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...
 - scikit-learn机器学习(四)使用决策树做分类,并画出决策树,随机森林对比
			
数据来自 UCI 数据集 匹马印第安人糖尿病数据集 载入数据 # -*- coding: utf-8 -*- import pandas as pd import matplotlib matplot ...
 - 使用 tuned/tuned-adm工具动态调优系统CPU性能模式
			
1)环境机器品牌:DELL 型号:R620配置:32核 * 1/256 GB*1/300 GB*4() + 1200 GB*2() 系统版本:CentOSLinux release 7.2.1511 ...
 - MySQL数据库相关资料
			
python 全栈开发,Day60(MySQL的前戏,数据库概述,MySQL安装和基本管理,初识MySQL语句) python 全栈开发,Day61(库的操作,表的操作,数据类型,数据类型(2),完整 ...