gpt4 book ai didi

delphi - 从 DPR 或 Delphi 中的其他函数/过程访问子函数/过程

转载 作者:行者123 更新时间:2023-12-03 15:37:52 24 4
gpt4 key购买 nike

据我所知 - 子例程对其父函数/过程具有私有(private)访问模式,对吗?

有什么方法可以从“外部世界”- dpr 或单元中的其他函数/过程访问它们吗?

另外 - 哪种方式需要更多的计算和编译文件的空间?

例如:

function blablabla(parameter : tparameter) : abcde;
procedure xyz(par_ : tpar_);
begin
// ...
end;
begin
// ...
end;

procedure albalbalb(param : tparam) : www;
begin
xyz(par_ : tpar_); // is there any way to make this function public / published to access it therefore enabling to call it this way?
end;

// all text is random.

// also, is there way to call it from DPR in this manner?

// in C++ this can be done by specifing access mode and/or using "Friend" class .. but in DELPHI?

最佳答案

嵌套过程/函数 - 在另一个过程或函数中声明的过程/函数是一种特殊类型,因为它们可以访问它们嵌套的过程的堆栈(从而访问参数/局部变量)。因此,Delphi 作用域规则,没有办法在“父”过程之外访问它们。仅当您需要利用它们的特殊功能时才使用它们。 AFAIK Delphi/Pascal 是少数具有此功能的语言之一。从编译器的角度来看,该调用有一些额外的代码来允许访问父堆栈帧 IIRC。AFAIK C++ 中的“ friend ”类/函数是不同的 - 它们是类访问方法,而在您的示例中您使用的是简单的过程/函数。在 Delphi 中,在同一单元中声明的所有过程/类都自动成为“友元”,除非在最新的 Delphi 版本中使用严格私有(private)声明。例如,只要所有内容都在同一单元中,此代码片段就可以工作:

  type
TExample = class
private
procedure HelloWorld;
public
...
end;

implementation

function DoSomething(AExample: TExample);
begin
// Calling a private method here works
AExample.HelloWordl;
end;

关于delphi - 从 DPR 或 Delphi 中的其他函数/过程访问子函数/过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2866401/

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