2015-06-26 18 views
5

tôi muốn cung cấp một giá trị mặc định trong một cuộc tranh luận metaclass:metaclass trị đối số mặc định (Delphi 2009)

type 
    TMyClass = class 
    end; 

type 
    TMyClassMetaClass = class of TMyClass; 

procedure MyProcedure(const AMetaClass: TMyClassMetaClass = TMyClass); 

Có thể? Trong Delphi2009 nó mang lại cho tôi lỗi: E2026 Biểu thức không đổi mong đợi

Trả lời

6

Theo các quy tắc của ngôn ngữ, một metaclass không phải là một biểu thức liên tục. Vì vậy, đặt cược tốt nhất của bạn là sử dụng quá tải thay vì:

procedure MyProcedure(const AMetaClass: TMyClassMetaClass); overload; 
procedure MyProcedure; overload; 

Và trong việc thực hiện:

procedure MyProcedure(const AMetaClass: TMyClassMetaClass); 
begin 
    .... 
end; 

procedure MyProcedure; 
begin 
    MyProcedure(TMyClass); 
end; 
+0

Cảm ơn, nó thực hiện các requierement. –

+2

Bạn cũng có thể đặt giá trị mặc định là 'nil' và xử lý' nil' làm lớp bạn muốn. – ZzZombo

Các vấn đề liên quan