热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在类型定义中使用时,`type`关键字实际意味着什么?

如何解决《在类型定义中使用时,`type`关键字实际意味着什么?》经验,为你挑选了2个好方法。

我最近阅读了一些VCL源代码行,并找到了该TCaption类型的定义:

TCaption = type string;

我一直认为它只是string类型的另一个名称,我认为它的定义如下:

TCaption = string;

所以,我找了关于关键字的文档type,我发现了这个:

    type Name = Existing type
    引用现有类型,例如新名称的字符串.

    type Name = type Existing type
    这与上面的效果相同,但确保在运行时,此类型的变量由其新类型名称标识,而不是现有的类型名称.

阅读之后,我仍然感到困惑,我不明白"......确保在运行时,这种类型的变量由他们的新类型名称识别......"实际上意味着.

有人可以对此有所了解吗?



1> Tom Brunberg..:

请考虑以下代码,并注意该过程Check()有一个var参数:

type
  Ta = string;       // type alias
  Tb = type string;  // compatible but distinct new type

procedure Check(var s: string);
begin
  ShowMessage(s);
end;

procedure TMain.Button2Click(Sender: TObject);
var
  a: Ta;
  b: Tb;
begin
  a := 'string of type Ta,';
  b := 'string of type Tb.';
  Check(a);
  Check(b);
end;

Check(b) 导致编译器错误:E2033实际和正式var参数的类型必须相同

在上面,类型Tb是兼容string的,你可以f.恩.分配a := b,但它的不同之处在于type identifier(在引擎盖下)具有不同的值,因此不被接受作为参数Check(var s: string).



2> MBo..:

类型声明就像

TCaption = type string;

创建具有不同RTTI信息的新类型.var如果string需要类型,它也不能用作函数参数.

新的RTTI信息"......确保在运行时,此类型的变量由其新类型名称标识......".因此,如果您尝试获取实例的类型名称TCaptiOnSame= string;,您将获得string,而对于TCaption类型变量,您将获得TCaption

要获得更准确的信息,最好参考官方帮助


推荐阅读
author-avatar
夜夜0603
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有