Tôi đã gặp một số hành vi lạ trong Delphi XE4.Làm thế nào để khai báo một loại thiết lập của một loại enum trong một lớp chung
Tôi không thể khai báo loại set
trong một lớp chung, trong đó loại thứ tự được khai báo trong cùng một lớp.
Ví dụ:
TTest<T> = class(TObject)
type
TEnumType = (eOne, eTwo, eThree);
TEnumTypes = set of TEnumType;
end;
Ở trên không biên dịch. Trình biên dịch phát ra lỗi "E2001: Loại thông thường bắt buộc".
Một lớp học không chung chung như
TTest = class(TObject)
type
TEnumType = (eOne, eTwo, eThree);
TEnumTypes = set of TEnumType;
end;
không biên dịch.
Đối với các lớp tổng quát để biên dịch thành công, loại thứ phải được khai báo bên ngoài các lớp:
TEnumType = (eOne, eTwo, eThree);
TTest<T> = class(TObject)
type
TEnumTypes = set of TEnumType;
end;
- là hành vi này được coi là một lỗi? Nếu có, nó đã được sửa trong một phiên bản sau?
- Có ai có cách giải quyết khác không? Tôi muốn khai báo các loại trong lớp vì chúng được sử dụng riêng trong các phần riêng của lớp này.
trình ở Seattle khỏe. Mới kiểm tra. Có lẽ đó là vấn đề của trình biên dịch XE4. Chúng tôi đã có rất nhiều vấn đề với generics trong lần XE4 .. –
Các câu hỏi có vẻ là offtopic ở đây, nó cần được giải quyết cho Emc. Nhưng câu trả lời là khá rõ ràng, các mã có thể được biên dịch mà không có vấn đề trong phiên bản mới nhất của Delphi, vì vậy 1. nó là lỗi và nó là cố định và 2. bạn đề nghị một workaround trong câu hỏi của bạn - xác định TEnumType bên ngoài lớp chung (trong thực hiện nếu bạn muốn ẩn nó ở chế độ riêng tư). –
@AndreiGalatyn, 1. "Nhưng câu trả lời là khá rõ ràng, mã có thể được biên dịch mà không có vấn đề trong phiên bản mới nhất của Delphi" - Làm thế nào là ** rõ ràng ** nếu OP có XE4? 2. Sử dụng phần thực hiện sẽ không hoạt động vì OP cần các trường TEnumType riêng được khai báo trong phần giao diện. – kobik