首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Delphi :使用TList <[any interface]>和默认比较器可能有危险吗?

在这个问题中,Delphi是一个软件开发环境,而TList是一个Delphi集合类,用于存储对象的列表。TList <any interface>是一个泛型列表,可以存储任何接口类型的对象。默认比较器是用于比较两个对象是否相等的函数。

当使用TList <any interface>和默认比较器时,可能会存在一些危险。默认比较器只是简单地比较两个对象的内存地址,而不是比较对象的内容。如果两个不同的对象具有相同的内存地址,则默认比较器会认为它们相等。这可能会导致一些意外的结果,并且可能会导致程序出现错误。

为了避免这些问题,建议使用自定义比较器来比较对象。自定义比较器可以根据对象的内容进行比较,而不是仅仅比较内存地址。这样可以确保比较的准确性和安全性。

总之,使用TList <any interface>和默认比较器可能会有一些危险,因为默认比较器只是简单地比较对象的内存地址。为了避免这些问题,建议使用自定义比较器来比较对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

delphi vcl_delphi数据类型

5、系统组件类 组件选项面板上的System标签包含了可视化非可视化组件的混合,TTimer类用来表示Windows系统计时,它只有一个OnTimer事件,每当计时启动时,就会调用这个事件,计时的时间间隔是由...比如音频、AVI视频MIDI音频等,媒体不但可以被播放、停止、暂停、定位、而且还有很多其他操作,这个类具有很多属性事件,这些属性事件大大简化了Windows Media Control Interface...这个组件组包含一些功能强大的组件(Win 3.1标签源自Delphi1中)。其中比较好用的是TTabSetTNotebook组件。...除了这里列出的GDI类以外,还有一些其他类,在以后的Delphi学习过程中,我们将会学习到更多有关这方面的类,并掌握使用它们。...TList类可以存储指针清单,TList类主要优点就是它提供了一种方法,这种方法可以使数组随着增加删除对象,动态地扩大或缩小。

2.7K10

scala(二十一) 模式匹配(match)

,此时需要变量名首字母大写 ---- 匹配类型 需要进行类型判断时,可以使用isInstanceOf[T]asInstanceOf[T],也可使用模式匹配实现同样的功能。...tlist.foreach{case (area,(school,(clazz,(stuName,id)))) => println(s"姓名:${stuName} 学校:${school}")} 匹配对象样例类...{ case Person(x,y,z) => println(s"姓名:$x;年龄:$y;性别:$z") } } 姓名:张三;年龄:18;性别:男 普通类可以进行模式匹配?...list.foreach(println(fun1)) 目前案例比较简单,可能从视觉上来说,第一种的模式匹配的方式,看起来比较简洁。偏函数需要定义一个函数(包裹模式匹配定义);所以觉得特麻烦。...具体的原因:函数就是比较好,真正调用时,这样的代码(如下)还不好吗?

78830
  • .NET框架设计(常被忽视的C#设计技巧)

    、逆变) 7.使用泛型的类型推断(还在为参数类型烦恼) 8.链式编程(设计符合大脑思维习惯的处理流程) 8.1.链式编程(多条件(方法碎片化)调用 9.部分类、部分方法的使用(扩大设计范围) 1...,再到现在的C#3那就更方便了,直接使用面向函数式的Lambda表达式;那么这样还需要反射调用对象的方法?...,然后就可以对附加了这个特性的类型进行相关的处理; 这其实没有问题,很正常的设计思路,也是比较通用的设计方法;但是我们的思维被前人固化了,难道特性就只能作为代码的声明?...(还在为参数类型烦恼) 在设计泛型方法的时候要学会使用类型推断技巧,这样会很方便的在调用的时候减少你显示调用的代码,也会显得很优美;大家应该都比较熟悉Func泛型委托,它是C#3中的主角,也是函数式编程的基础...中,比较经典就是ASP.NET后台代码前台的模板代码,在运行时然后再通过动态编译合起来,我们不要忘记可以使用部分类、部分方法来达到在运行时链接编译时代码运行时代码,类似动态调用的效果;由于这部分内容比较简单

    2K71

    数组类型与数组指针的巧妙利用

    本例通过存取结构, 慢慢引入了数组类型与指针的一些使用方法; 其中六个小例子的测试内容结果都是一样的. ---- unit Unit1; interface uses Windows, Messages...Button6Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} type {先定义结构结构指针...10; end; {用这种方法不能像下面这样读写, 也就是 [] 中不能是超过 0 的常数, 但可以用变量} {这也容易理解, 因为常量会直接编译到代码中, 在没有分配内存以前, 编译不知道数组会更大..., DelphiTList 类就是这么干的} procedure TForm1.Button6Click(Sender: TObject); type PArr = ^TArr; TArr...for i := 0 to 2 do begin buf^[i].F1 := Chr(i+65); buf^[i].F2 := (i+1) * 10; end; {上例不同的是

    78220

    【小家Java】你真的了解Java泛型参数?细说java.lang.reflect.Type(ParameterizedType、TypeVariable、WildcardType...)

    不就是泛型,平时都使用着呢,没什么难的吧。 感觉了解了,但是真正的深入才知道自己了解甚少! 没有泛型的时候,只有原始类型。此时,所有的原始类型都通过字节码文件类Class类进行抽象。...~ GenericArrayType(数组类型) 泛型数组,描述的是形如:A[]或T[]类型变量原始类型 public interface GenericArrayType extends Type...另外需要说明的一点是:表达式中,如果你没有指定上线,默认都是有上限的:class java.lang.Object,但是下限不会有默认值 泛型中使用 & (并且)操作符 我们不乏有时候能够看到泛型搭配上...tList: TypeVariable getBounds interface java.io.Serializable 定义Class getGenericDeclaration: class...Java中的泛型仅仅是给编译javac使用的,确保数据的安全性免去强制类型转换的麻烦。但是,一旦编译完成,所有的泛型有关的类型全部擦除。

    3.1K10

    TypeScript交叉类型&联合类型

    这里分两种情况,如果同名属性的类型相同则合并后还是原本类型,如果类型不同,则合并后类型为never2.基本数据类型交叉anynumber交叉结果是any类型,anyboolean交叉结果是any类型...,anynever交叉结果是never类型。...注意:any 类型除 never 类型以外的任何类型交叉时都为any,不愧是any大法type A = any & 1; //anytype B = any & boolean; //anytype...C = any & never; //never其他情况比较:type A = number & 1; //1type B = 'maoxiansheng' & string; //'maoxiansheng'type...二、联合类型(Union types)联合类型交叉类型比较相似,联合类型通过|符号连接多个类型从而生成新的类型。它主要是取多个类型的交集,即多个类型共有的类型才是联合类型最终的类型。

    65810

    Delphi 语言「建议收藏」

    另外,Delphi写Android、IOSLinux不就是为老司机们准备的,新司机谁他娘的还用Delphi这破东西呢,何况Android、IOSLinux下本身就有很多开发工具都是开源免费的,又正宗又原生态...所以,站在追赶新技术的角度出发,专业一点的开发者是不会选择DelphiXE去开发AndroidIOS的,尽管Embarcadero吹嘘其控件多、做的界面比较漂亮也不会有什么作用。...如果你使用C或C++写程序,可以在任何地方进行编译,例如Windows、Linux、手机,甚至是单片机上都可以使用C写程序。 没有成为标准的后果就是跨平台,以及影响第三方编译的出现。...Delphi之父Anders Hejlsberg离开Borland去了微软,导致Delphi的编译有三年的时间无人敢动,因为Anders Hejlsberg完全使用汇编实现的编译,无人能够看懂。...使用Delphi编写一些项目,你可能需要几位比较高级的程序员才能胜任,而使用Java或C#只需要更少更加普通的程序员。

    2.3K20

    vue2.x老项目typescript改造过程经验总结

    Window { // 全局变量     i18n: any;     eCharts: any;   } } declare module 'vue/types/vue' {   interface...$confirm: any;   } } declare global {   namespace JSX {     interface Element extends VNode {}     interface...可选属性vs null undefined null undefined 是 ts 中的基础类型,分别具有值 null undefined,默认情况下它们是所有类型的子类型,即可以赋值给任意类型...TypeScript 的设计目标之一不是为了创建一个“正确的类型系统”,而是“在正确性生产力之间取得平衡”。——TypeScript 编译不会强制你声明类型,类型安全的程度由你自己来决定。...依赖于装饰语法。而目前装饰目前还处于stage2阶段(可查看tc39 decorators),在实现细节上还存在许多不确定性,这使其成为一个相当危险的基础。 复杂性增高。

    5.4K51

    【Linux 操作系统】vim编辑配置及常用命令

    C语言功底太差了, 跟着班从最基础的开始学习吧, Linux C 开发, 使用vim编辑进行开发, 必须把vim编辑器用熟练, 在这篇博客里面总结下vim; 一. vim的配置文件 快捷键优点 : ...softtabstop=4  " 统一缩进为4 set shiftwidth=4  " 统一缩进为4 set noexpandtab  " 不要用空格代替制表符 set smarttab  " 在行段开始处使用制表符...Ctrl + F12 文件比较 "比较文件 nnoremap :vert diffsplit (5) 新建标签 M + F2 新建一个标签 "新建标签 map <M-F2...键的宽度 set tabstop=4 " 统一缩进为4 set softtabstop=4 set shiftwidth=4 " 不要用空格代替制表符 set noexpandtab " 在行段开始处使用制表符...VIM 编辑命令 打开文件命令 :  vim diff a.c b.c 命令打开两个文件 并比较两个文件 vim -p a.c b.c 打开多个文件, 并且以多标签形式打开 1.

    2.3K50

    手把手教你配置linux下C++开发工具——vim+ycm(YouCompleteMe),支持基于语义的自动补全第三方库补全(史上最简单、史上最透彻、史上最全的终极解决方案)

    /configure –help)               2、注意:vim8.2不支持同时使用python2python3,所以千成不可以在上述命令中指定:–enable-pythoninterp...支持的               3、如果发现了错误,则安装不存在的依赖包:                      3.1 yum install perl-devel #让vim支持perl解释...tags let Tlist_GainFocus_On_ToggleOpen = 1 " 打开 Tlist 窗口时,光标跳到 Tlist 窗口 let Tlist_Exit_OnlyWindow...clang对cc++进行语法检查,对python使用pylint进行语法检查 " let g:ale_linters = { 'c++': ['clang', 'gcc'] }...clang对cc++进行语法检查,对python使用pylint进行语法检查 " let g:ale_linters = { 'c++': ['clang', 'gcc'] }

    5.6K31

    Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

    以前我都是使用Ctags+或来进行补全,然而其命中率却比较低,有时候根本就乱匹配。...这是一个新生代vim插件管理使用git进行插件安装更新。以前有一个pathogen。插件管理的好处是:使用简单,自动化管理vim的插件。...否则默认configure的将是Debug版本,问题多多。最后,我们使用make命令进行编译。编译过程比较长,耗时半个小时左右。这一步主要是为了下面编译YouCompleteMe插件做准备。...因为,YouCompleteMe是C/S架构的,所以存在服务和服务端的说 法。另外,在/tmp/ycm_temp/目录下还可以看到服务请求日志,更加可以验证这一点。...而重点难点在于YouCompleteMeClang的编译工作,这两个编译步骤都比较复杂,编译耗时较长。所以花了很大篇幅讲解。 三、附录 (1)效果图。

    1.7K100

    手把手教你配置linux下C++开发工具——vim+ycm(YouCompleteMe),支持基于语义的自动补全第三方库补全(史上最简单、史上最透彻、史上最全的终极解决方案)

    /configure --help)               2、注意:vim8.2不支持同时使用python2python3,所以千成不可以在上述命令中指定:--enable-pythoninterp...支持的               3、如果发现了错误,则安装不存在的依赖包:                      3.1 yum install perl-devel #让vim支持perl解释...tags let Tlist_GainFocus_On_ToggleOpen = 1 " 打开 Tlist 窗口时,光标跳到 Tlist 窗口 let Tlist_Exit_OnlyWindow...clang对cc++进行语法检查,对python使用pylint进行语法检查 " let g:ale_linters = { 'c++': ['clang', 'gcc'] }...clang对cc++进行语法检查,对python使用pylint进行语法检查 " let g:ale_linters = { 'c++': ['clang', 'gcc'] }

    4.5K30

    【收藏】网络设备安全加固规范

    根据设备本身具有的属性实际维护经验,建议相关安全审计信息应包括设备登录信息日志设备事件信息日志,同时提供SYSLOG服务的设置方式。...100 permit ip any any Router(config)#interface g0/0 Router(Config-if)# ip access-group 100 in 建议采用访问列表控制流出内部网络的地址必须是属于内部网络的...4.2禁止TCP、UDP Small服务 Cisco路由提供一些基于TCPUDP协议的小服务如:echo、chargendiscard。...NTP不是十分危险的,但是如果没有一个很好的认证,则会影响路由正确时间,导致日志其他任务出错。要求关闭这些服务。...操作方式: #对远程登录用户先用RADIUS服务进行认证,如果没有响应,则不认证。 #认证服务IP地址为129.7.66.66,无备用服务,端口号为默认值1812。

    1K21

    D语言的陷阱

    在多态上主要使用虚方法表多接口来实现,而数据封装则主要通过它的attributes。  OK,下面我们先来看下D语言attributes语法层面上的小陷阱。 ...";} } 函数TestClassA()会执行成功?答案是肯定的。因为在不带修饰符的情况下,D语言默认是public级别,不论对象是全局函数,结构还是类,成员函数。...这一点跟Delphi很相似,只不过在Delphi中称其为单元(unit)。俺认为,D语言提供这个特性虽然方便了程序员编码,但也可能造成槽糕的代码组织编程习惯。因为它破坏了OOP的封装性。...D语言实现多态主要是通过虚方法调用多接口继承。此外,抽象类的使用也是实现多态的重要途径之一。多态问题非常复杂,很难一下说清楚。...D认为,所有非静态,非私有方法默认都是虚方法。需要说明的是,虚方法调用的开销要比非虚方法调用大的多。因此,D编译在编译代码之前,会分析子类是否overridden父类的虚方法。

    62510
    领券