2010-01-20 35 views
8

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

13

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

+0

+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

+1

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

+0

+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 ... –

0

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; 
+1

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ị. –

+0

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

+0

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

2

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:

Visualize the unit namespaces hierarchy in the IDE

+1

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

+0

Trong IDE Delphi XE7 IDE được gọi là "Tên phạm vi đơn vị" – SoftDeveloper

+0

@SoftDeveloper hiện XE7 vẫn còn có '- NS = Tham số đường dẫn tìm kiếm không gian tên cho dcc32? – mjn

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