有人可以向我解释 是什么原因 在创建通用类时我必须将我的私有(private)常量移动到接口(interface)部分?这正在扼杀我的设计,我不希望其他人看到应该保密的东西。

unit Unit38;

interface

uses
  Generics.Collections;

type
  TSimpleClass<T> = class(TObject)
  private
    procedure DoSomethingInternal(const SomeString: string);
  public
    procedure DoSomething;
  end;

implementation

const
  MyString = 'some string'; //Why this must be public?

{ TSimpleClass<T> }

procedure TSimpleClass<T>.DoSomething;
begin
  DoSomethingInternal(MyString); //Compiler error
end;

procedure TSimpleClass<T>.DoSomethingInternal(const SomeString: string);
begin
  //-------
end;

end.

谢谢。

最佳答案

D2010 中存在同样的错误,因此 D2010 的泛型修复没有解决这个问题。这是一个错误:http://qc.embarcadero.com/wc/qcmain.aspx?d=79747

已在版本 15.0.3863.33207 中修复。我认为是 XE

关于此的另一个 QC 是:http://qc.embarcadero.com/wc/qcmain.aspx?d=78022,它涉及一个枚举并且仍然是开放的。

顺便说一下,关于错误的文档不是很清楚。看:

E2506 Method of parameterized type declared in interface section must not use local symbol '%s'

它涉及泛型类中的类 var 不能在类的构造函数中分配文字(!)值,修复方法是参数化构造函数......不知道为什么,但我想这与编译器限制有关.

关于delphi - E2506 在接口(interface)部分声明的参数化类型的方法不能使用局部符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7899247/

10-13 01:10