gpt4 book ai didi

class - 是否可以使用接口(interface)部分的实现部分中声明的类

转载 作者:行者123 更新时间:2023-12-03 13:43:25 25 4
gpt4 key购买 nike

如果我理解正确,interface部分对其他单位可见,implementation部分仅在当前 .pas 中可见文件。
我有两个类,类TA应该对外部可见,其他类 TB不应该,但我需要一个类型为 TB 的字段在 TA .

interface

type
TA = class
//something
B : TB;
end;

//something

implementation

type
TB = class
//something
end;
它不是那样工作的。我也不能使用前向声明。有办法吗?
或者,有没有办法声明 TBinterface部分,但让它有点私有(private)?

最佳答案

类型在声明之前不能使用(就行号而言)。特别是,这意味着您不能使用在 implementation 中声明的类型。 interface 中的部分部分。
但是,请考虑以下示例:

unit VisibilityTest;

interface

type
TFrog = class
strict private type
TFrogMetabolism = class
procedure DoAnabolismStuff;
procedure DoCatabolismStuff;
end;
strict private
FMetabolism: TFrogMetabolism;
public
procedure Croak;
procedure Walk;
procedure Jump;
end;

implementation

{ TFrog.TFrogMetabolism }

procedure TFrog.TFrogMetabolism.DoAnabolismStuff;
begin

end;

procedure TFrog.TFrogMetabolism.DoCatabolismStuff;
begin

end;

{ TFrog }

procedure TFrog.Jump;
begin

end;

procedure TFrog.Croak;
begin

end;

procedure TFrog.Walk;
begin

end;

end.
这里 TFrog class 对其他单位可见,以及它的 Croak , Walk , 和 Jump方法。
它确实有一个类型为 strict private 的(在本例中为 TFrogMetabolism)字段。 , 只能在 TFrog 内部使用的类型-- 因此只在这个单元内 -- 因为前面的 strict private规范。
这应该会给你一些想法。一些变体是可能的:
  • 如果您删除 strict来自 strict private type , TFrogMetabolism class 可以在这个特定单元内的任何地方使用,而不仅仅是在 TFrog 中。 .
  • 如果替换 privateprotected ,该类也可以用于不是 TFrog 的类中但源自 TFrog .
  • 关于class - 是否可以使用接口(interface)部分的实现部分中声明的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66790085/

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