tôi tạo ra hai đơn vị và đặt một lớp đầu tiên vào một trong số họ:Không thể hiểu Delphi XE6 loại bảo vệ
unit UBaseClass;
interface
type
TBaseOuterClass = class
protected type
TBaseInnerClass = class
public
end;
protected
function GetInnerInstance: TBaseOuterClass.TBaseInnerClass; virtual;
end;
implementation
{ TBaseOuterClass }
function TBaseOuterClass.GetInnerInstance: TBaseOuterClass.TBaseInnerClass;
begin
// doesn't matter
end;
end.
Và tôi đặt một lớp được thừa kế thành một đơn vị thứ hai:
unit UDerClass;
interface
uses
UBaseClass;
type
TDerOuterClass = class(TBaseOuterClass)
protected type
TDerInnerClass = class(TBaseInnerClass)
end;
protected
function GetInnerInstance: TBaseOuterClass.TBaseInnerClass; override;
end;
implementation
{ TDerOuterClass }
function TDerOuterClass.GetInnerInstance: TBaseOuterClass.TBaseInnerClass;
begin
end;
end.
khi tôi đang cố gắng để biên dịch tôi nhận được
[dcc32 Lỗi] UDerClass.pas (22): E2362 không thể truy cập được bảo vệ biểu tượng TBaseOuterClass.TBaseIn nerClass
tại dòng chức năng TDerOuterClass.GetInnerInstance: TBaseOuterClass.TBaseInnerClass;
Tôi không thể hiểu tại sao TBaseOuterClass.TBaseInnerClass (như lớp bảo vệ bên trong) không thể truy cập từ TDerOuterClass (có nguồn gốc cho TBaseOuterClass). Điều gì trong trường hợp này là các loại được bảo vệ thực sự?
Tôi chưa tìm thấy giải thích nào cho điều này tại Nested Type Declarations topic. Vì vậy, có bất kỳ lý do cho hành vi này?
Nó cũng liên quan đến các loại bảo vệ đơn giản như
protected type
TSimpleType = Integer;
tôi không thể viết một hàm trong TDerOuterClass
protected
function GetValue: TSimpleType;
kể từ khi tôi sẽ nhận được một thông điệp
[dcc32 Lỗi] UDerClass.pas (16): E2003 Số nhận dạng không khai báo: 'TSimpleType'
Ví dụ và phân tích của bạn rất rõ ràng. Điều này dường như là một khiếm khuyết. Gửi báo cáo lỗi cho Cổng thông tin chất lượng. –
Cố định ở 10.2 Tokyo: https://quality.embarcadero.com/browse/RSP-16305 –