gpt4 book ai didi

Delphi casting with as and Supports 区别

转载 作者:行者123 更新时间:2023-12-04 02:27:12 25 4
gpt4 key购买 nike

使用 Supportsas 关键字进行转换有什么区别,除了使用 as 我首先需要检查是否可以使用关键字。

最佳答案

Supports 将提供一个接口(interface)(如果该接口(interface)受支持)。

is 确定一个类/接口(interface)是否派生自另一个类/接口(interface)。

asis 做同样的事情,但也返回一个类型检查的转换。

如果你已经通过is确认了一次强制转换成功,你就不需要使用as,你可以直接进行强制转换,这样更高效:

if(pSomeObjectRef is TMyObject) then
TMyObject(pSomeObjectRef).MyUsefulMethod(...);

由于 Delphi 不支持多重继承,使用接口(interface)是实现这种行为的唯一方法。一个对象可以是不止一个事物,而不仅仅是它本身或它的祖先。

如果您不使用接口(interface),则不需要使用 Supports()

使用as 进行转换允许您将对象引用转换为接口(interface),以及对不同类对象的引用。就个人而言,我不使用 as,而且我在查看的代码中很少看到它。由于 as 可以引发异常,因此您应该采取措施避免异常,并在引发异常时捕获它们。因为您无论如何都可以检查这些,所以永远不需要使用 as

当转换到接口(interface)时,您可以使用 Supports() 的结果,而不是依赖异常来捕获不存在的接口(interface):

if (SysUtils.Supports(pSomeObjectRef, IMyWantedInterface, diInterfaceRef)) then
begin
diInterfaceRef._AddRef(); // removed when diInterface falls out of scope
...
end
else
begin // it doesn't support the interface!
...
end;

无论您是想捕获异常(有些人喜欢,有些人不喜欢 - 它确实使代码不那么线性),还是 if..else 的代码,通常是一个问题偏爱。我不喜欢依赖异常(但我仍然有 try..finallytry..except block ),但当然还有其他意见!

关于Delphi casting with as and Supports 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66712015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com