Có bất kỳ lợi ích thiết thực nào khi sử dụng tên tệp đơn vị dài như MyLib.MyUtils.pas hoặc nó chỉ là một loại tiền tố tên đơn vị?Không gian tên trong Delphi
Trả lời
Namespaces, giống như tất cả các định danh, có nghĩa là để tổ chức.
Vì vậy, sử dụng chúng, chỉ những lợi ích nếu dự án của bạn được tổ chức theo cách tốt hơn. Vấn đề rất chủ quan này (đã có 'cuộc chiến' ngay cả những quy ước đặt tên đơn giản nhất!), Nên không thể trả lời được.
Here is some documentation về cách không gian tên hoạt động trong Delphi. Lưu ý rằng không gian tên 'đúng' (nơi nhiều hơn một DLL chung có thể đóng góp vào cùng một không gian tên; đây là cách hàm không gian tên trong thế giới .NET) không thể thực hiện được trong Delphi: bạn có thể đi theo cách BPL, nhưng đó là không giống như một 'DLL chung'. Đây không phải là một hạn chế của Delphi, mà là cách mà các DLL bản địa trong công việc của Windows '.
--jeroen
Tôi đã chỉnh sửa câu trả lời này để trả lời nhận xét và sự hiểu lầm rõ ràng của tôi về câu hỏi.
Lợi ích thực tế duy nhất tôi thấy khi sử dụng tên đơn vị như bạn đề xuất là IDE sẽ sắp xếp các đơn vị theo cách tốt hơn không có tiền tố "không gian tên". Thay vào đó, tôi thích sử dụng các thư mục khác nhau.
Trong một số trường hợp, điều này có thể hợp lý - do xung đột tên. Ví dụ, bạn có thể có một đơn vị MyLib.Utils
và một đơn vị MyOtherLib.Utils
Điều này thực sự có thể tránh được một số nhầm lẫn (cả về IDE lẫn cho chính bạn).
Bạn cũng có thể mô phỏng một namespace sử dụng một lớp trừu tượng với các phương pháp lớp tĩnh:
type
Utils = class abstract
class procedure Beep; static;
end;
...
Utils.Beep;
Nếu tôi hiểu Serg đúng, anh ấy hỏi về dấu chấm ** bên trong ** (không phải sau) tên đơn vị. –
Bạn có thể đúng, vì câu hỏi không phải là rất chi tiết. Tôi đã chỉnh sửa câu trả lời của mình để phản ánh khả năng này. – jpfollenius
Chắc chắn câu hỏi là về tên đơn vị "chấm".Theo như tôi hiểu dấu chấm chỉ là một biểu tượng khác trong tiền tố tên đơn vị và không có gì nhiều hơn nữa. Ví dụ, bạn không thể viết "sử dụng MyLib" để sử dụng MyLib.MyUtils hoặc sử dụng "MyLib" định danh theo bất kỳ cách nào khác. – kludg
Xem:
Why does Delphi (dcc32.exe) have an option to set a “Namespace search path”?
Namespaces trong Delphi được hỗ trợ bởi trình biên dịch, vì vậy các dấu chấm trong tên đơn vị có một ý nghĩa đặc biệt. Bạn có thể sử dụng tên đầy đủ của tệp hoặc bạn có thể sử dụng kiểu 'lối tắt' cho tên tệp nếu tùy chọn dcc32.exe được thiết lập đúng cách.
Vì vậy, bạn cũng có thể viết
uses
MyBestTools;
để tránh tên đủ tiêu chuẩn đầy đủ
uses
MyCompany.MyProject.MyLibrary.MyBestTools;
Disclaimer: hiện này là tất cả các lý thuyết nhưng tôi sẽ tận dụng không gian tên trong một số dự án iin tương lai gần
Để được hỗ trợ IDE tốt hơn nữa, vui lòng bỏ phiếu trong QualityCentral để biết đề xuất tính năng này:
Tôi đã tìm thấy các tùy chọn tương tự trong IDE (Delphi 2009): Dự án/Tùy chọn/Trình biên dịch Delphi/Tên miền mặc định, Tên tiền tố – kludg
Trong IDE Delphi XE7 IDE được gọi là "Tên phạm vi đơn vị" – SoftDeveloper
@SoftDeveloper hiện XE7 vẫn còn có '- NS
- 1. Không gian tên trong Delphi XE2
- 2. Delphi - unmangle tên trong BPL's
- 3. loại tên hoặc không gian tên không tồn tại trong không gian tên
- 4. Tên loại hoặc không gian tên 'Mvc' không tồn tại trong không gian tên 'System.Web'
- 5. Tên loại hoặc không gian tên 'Caching' không tồn tại trong không gian tên 'System.Runtime'
- 6. Tên loại hoặc không gian tên 'ServiceBus' không tồn tại trong không gian tên 'Microsoft'
- 7. Tên kiểu hoặc không gian tên UpdatePanel không tồn tại trong không gian tên System.Web.UI
- 8. Tên loại hoặc không gian tên 'DirectoryServices' không tồn tại trong không gian tên?
- 9. Không gian tên trong JSON
- 10. Không gian tên trong Redis?
- 11. Không gian tên và không gian tên phụ
- 12. Tên "LocalizedStrings" không tồn tại trong không gian tên
- 13. Thẻ 'XXX' không tồn tại trong không gian tên clr của không gian tên XML: YYY '
- 14. Truy cập không gian tên chung C++ từ bên trong một không gian tên khác
- 15. Đổi tên các không gian tên
- 16. Vấn đề không gian tên trong C++
- 17. Lớp riêng tư trong không gian tên
- 18. Không gian tên lồng nhau trong C++
- 19. sử dụng không gian tên trong @param
- 20. Chức năng không gian tên trong jQuery
- 21. Đổi tên không gian tên trong NetBeans PHP?
- 22. Loại bỏ không gian tên của tên loại trong C++
- 23. Tên đủ điều kiện trong khai báo không gian tên
- 24. Delphi: Đổi tên Thư mục Không hợp lệ
- 25. không gian tên ẩn danh
- 26. Các không gian tên .NET
- 27. Không gian tên Plugin jQuery
- 28. không gian tên mặc định
- 29. Không gian tên cho [DataContract]
- 30. Hình động không gian tên
+1 liên kết thú vị. Tôi thậm chí không biết rằng có "không gian tên chính thức" ở Delphi. – jpfollenius
Dường như bài viết tài liệu được viết cho Delphi.NET (tệp dcuil, v.v.). Embarcadero phải chỉnh sửa nó để tạo tài liệu Delphi cho các không gian tên Win32. – kludg
+1 cảm ơn liên kết ... Bây giờ tôi đang tìm bất kỳ tham chiếu nào hỗ trợ các tiền tố không gian tên này ... –