Tôi đang rất nhầm lẫn giữa Không gian tên và Tập hợp. Là System.Data
và System.Web
Không gian tên hoặc Tập hợp?
Tôi nhận thấy chúng được gọi là không gian tên và đồng thời chúng hiện diện trong GAC_32
thư mục. Vậy chính xác thì chúng là gì?
Tôi đang rất nhầm lẫn giữa Không gian tên và Tập hợp. Là System.Data
và System.Web
Không gian tên hoặc Tập hợp?
Tôi nhận thấy chúng được gọi là không gian tên và đồng thời chúng hiện diện trong GAC_32
thư mục. Vậy chính xác thì chúng là gì?
Câu trả lời:
System.Data
là một không gian tên , System.Data.DLL
(tệp) là một hợp ngữ .
Không gian tên là một nhóm các kiểu hợp lý (chủ yếu là để tránh xung đột tên). Một hợp ngữ có thể chứa các kiểu trong nhiều không gian tên ( System.DLL
chứa một vài ...), và một không gian tên duy nhất có thể được trải rộng trên các hợp ngữ (ví dụ System.Threading
).
namespace
câu lệnh C # (hoặc tương đương trong ngôn ngữ .NET khác) trong mã nguồn được biên dịch để tạo hợp ngữ của bạn. Lưu ý rằng hợp ngữ thứ hai có thể mở lại không gian tên và thêm nhiều lớp hơn vào đó.
Không gian tên là một nhóm hợp lý của các lớp thuộc cùng một chức năng. Vì vậy,System.Web
vàSystem.Data
là không gian tên
MSDN mô tả nó là:
Không gian tên được sử dụng nhiều trong lập trình C # theo hai cách. Thứ nhất, .NET Framework sử dụng không gian tên để tổ chức nhiều lớp của nó Thứ hai, khai báo không gian tên của riêng bạn có thể giúp kiểm soát phạm vi của tên lớp và phương thức trong các dự án lập trình lớn hơn.
Assembly là một đoạn mã (được biên dịch trước) có thể được thực thi bởi môi trường thời gian chạy .NET. Nó chứa một hoặc nhiều Không gian tên. Một chương trình .NET bao gồm một hoặc nhiều hợp ngữ.
System.Web.dll
và System.Data.dll
là các tập hợp.
MSDN mô tả nó là:
Assemblies là khối xây dựng của các ứng dụng .NET Framework; chúng tạo thành đơn vị cơ bản của việc triển khai, kiểm soát phiên bản, tái sử dụng, xác định phạm vi kích hoạt và quyền bảo mật. Hợp ngữ là một tập hợp các loại và tài nguyên được xây dựng để hoạt động cùng nhau và tạo thành một đơn vị chức năng hợp lý. Hợp ngữ cung cấp thời gian chạy ngôn ngữ chung với thông tin mà nó cần biết về các triển khai kiểu. Đối với thời gian chạy, một kiểu không tồn tại bên ngoài ngữ cảnh của một hợp ngữ.
Nói ngắn gọn:
Hội,, tổ hợp:
Hợp ngữ cung cấp một đơn vị cơ bản của nhóm mã vật lý, đó là Đơn vị đầu ra. Nó là một đơn vị Triển khai & một đơn vị lập phiên bản. Các tập hợp chứa mã MSIL.
Không gian tên:
Một không gian tên cung cấp một đơn vị cơ bản của nhóm mã logic, nó là một Tập hợp các tên trong đó mỗi tên là Duy nhất. Chúng tạo thành ranh giới logic cho một Nhóm các lớp. Không gian tên phải được chỉ định trong Project-Properties.
Nói ngắn gọn:
Lời khuyên.
Một hợp ngữ chứa một tập hợp các kiểu (ví dụ: Hệ thống l'assembly chứa nhiều không gian tên bao gồm System, System.IO, ecc). Thông thường, tên của assembly giống với không gian tên mà nó chứa nhưng không phải lúc nào cũng vậy.
Ví dụ khác về tập hợp và không gian tên.
Assembly 1 ( CoreAssembly.DLL )
Chứa không gian tên Namespace1.subnamespace1
Assembly 2 ( ExtensionCoreAssembly.DLL )
Chứa không gian tên Namespace1.subnamespace1
Có thể sử dụng tên của assembly chứa các không gian tên khác nhau và mở rộng một assembly hiện có bằng một assembly khác bằng kỹ thuật này.
ĐỊNH NGHĨA.
Lắp ráp
Hợp ngữ là một tập hợp các kiểu và tài nguyên tạo thành một đơn vị chức năng hợp lý. Tất cả các kiểu trong .NET Framework phải tồn tại trong hợp ngữ; thời gian chạy ngôn ngữ chung không hỗ trợ các loại bên ngoài hợp ngữ. Mỗi lần bạn tạo Ứng dụng Microsoft Windows®, Dịch vụ Windows, Thư viện lớp hoặc ứng dụng khác bằng Visual Basic .NET, bạn đang tạo một lắp ráp duy nhất. Mỗi lắp ráp được lưu trữ dưới dạng tệp .exe hoặc .dll. Lưu ý Mặc dù về mặt kỹ thuật, có thể tạo các tập hợp kéo dài nhiều tệp, nhưng bạn không có khả năng sử dụng công nghệ này trong hầu hết các trường hợp.
Không gian tên
Một cách khác để tổ chức mã Visual Basic .NET của bạn là thông qua việc sử dụng không gian tên. Không gian tên không phải là sự thay thế cho tập hợp, mà là một phương pháp tổ chức thứ hai bổ sung cho tập hợp. Không gian tên là một cách nhóm các tên loại và giảm nguy cơ xung đột tên. Một không gian tên có thể chứa cả các loại và không gian tên khác. Tên đầy đủ của một kiểu bao gồm sự kết hợp của các không gian tên chứa kiểu đó.
Liên kết: http://msdn.microsoft.com/en-us/library/ms973231.aspx
Chúng là các không gian tên, các bảng tin chứa nhiều hơn một không gian tên System.dll
.
Ngoài ra, một không gian tên có thể chứa các không gian tên lồng nhau, chúng chỉ là những tên logic để tổ chức mã. Chỉ cần lưu ý, một DLL
tệp là tập hợp chứa (các) không gian tên.
GAC
là Global Assembly Cache . Theo MSDN:
Bộ đệm ẩn lắp ráp toàn cầu lưu trữ các tập hợp được chỉ định cụ thể để được chia sẻ bởi một số ứng dụng trên máy tính.
Vì vậy, thường được sử dụng lắp ráp được lưu trữ trong GAC
và do đó bạn không cần phải sao chép tất cả các file lắp ráp vào thư mục dự án của bạn mà bạn đang tham khảo từ hội project.The của bạn được lưu trữ trong GAC
là tên mạnh assemblies.Normally khi bạn thêm một tham chiếu đến một assembly từ dự án không phải Strong-Named
là bản sao của .dll
tệp của bạn sẽ được tạo trên thư mục của bin\Debug
bạn..Nếu bạn muốn, bạn có thể tạo assembly của mình (ví dụ: dự án thư viện lớp) Strong-Named. Xem: Cách thực hiện: Ký một Assembly với Strong Tên
Những người khác đã đưa ra câu trả lời rất tốt và chi tiết cho câu hỏi này. Nhưng tôi muốn chỉ ra rằng khi bạn không chắc chắn, bạn có thể xem trên MSDN. Thư viện MSDN giải thích rất rõ ràng và đơn giản về không gian tên và tập hợp chứa bất kỳ kiểu nào đã cho. Nó thậm chí còn cho biết tên của tệp (in System.Data.dll)
nên không có sự mơ hồ.
Tệp mà bạn thấy trong GAC System.Data.dll
là một tập hợp và chứa các không gian tên bao gồm System.Data
. Nếu bạn xem thuộc tính Tham chiếu trong Visual studio thì bạn sẽ thấy:
Sau đó, nếu bạn nhấp chuột phải vào tham chiếu và chọn chế độ xem trong trình duyệt đối tượng, bạn sẽ thấy không gian tên trong hội đồng cụ thể đó.
Như @amdluigi nói, "Thông thường, tên của assembly giống với một không gian tên mà nó chứa nhưng không phải lúc nào".
Có một ảnh chụp màn hình ở trên System.Data.dll trong Trình duyệt đối tượng trong Studio. Đó là một ví dụ tuyệt vời để khám phá các vấn đề ở đây. Lưu ý rằng hầu hết các không gian tên có trong hợp ngữ là System.Data hoặc một không gian tên con của System.Data.
Nói chung, đó là một thực tiễn tốt để các tên hợp ngữ có liên quan đến các không gian tên bên trong chúng. Lưu ý rằng khi Studio lần đầu tiên tạo một dự án để xây dựng một assembly, một trong những thuộc tính của dự án là một không gian tên mặc định. Khi bắt đầu, Studio đặt không gian tên mặc định giống với tên của chính dự án. Nếu bạn chọn đổi tên một dự án, hãy xem xét việc thay đổi không gian tên mặc định của nó.
Có hai không gian tên bổ sung: Microsoft.SqlServer có thể hiểu được. Một số kiểu SQL Server mà họ không muốn đóng gói trong một hội đồng riêng biệt.
Nhưng System.Xml là gì ???? Có một tập hợp System.Xml.dll. Tại sao không gian tên này cũng hiển thị trong System.Data.dll?
Lưu ý rằng một hợp ngữ có thể mở lại một không gian tên và thêm nhiều hơn vào nó - đó chính xác là những gì System.Data.dll đang làm với không gian tên System.Xml.
Lý do là không gian tên không có ý nghĩa về hiệu suất, nhưng tập hợp lại rất nhiều. Nếu bạn có 1000 lớp với số lượng mã đáng kể, bạn không muốn có một tổ hợp có dung lượng bộ nhớ rất lớn. Bạn cũng không muốn 1000 tập hợp mỗi tập hợp một lớp. Mọi hợp ngữ cần được tải vào bộ nhớ trước khi nội dung của nó có thể được thực thi. Bạn muốn một assembly chứa một số lượng hợp lý các lớp có liên quan với nhau, vì vậy khi ứng dụng của bạn đã tải một assembly để lấy một trong các lớp của nó, nó sẽ nhận các lớp khác mà ứng dụng có thể cần miễn phí. Độ hạt rất quan trọng: không quá to, không quá nhỏ, vừa phải.
Lưu ý rằng System.Data.dll mở lại System.Xml và thêm chính xác một lớp: XmlDataDocument. Điều xảy ra là lớp này được sử dụng để diễn giải dữ liệu quan hệ dưới dạng tài liệu XML. Nếu ứng dụng của bạn chỉ sử dụng XML, nó sẽ không cần lớp này. Nếu ứng dụng của bạn xử lý dữ liệu quan hệ, nó có thể. Vì vậy, mặc dù XmlDataDocument kế thừa từ XmlDocument và nằm trong không gian tên System.Xml, nó được đóng gói trong hợp ngữ System.Data.dll.
Tất cả điều này đặc biệt quan trọng nếu bạn có nền tảng về Java, nơi chỉ có một khái niệm, gói. Trong .NET có hai, assembly và namespace. Hai là trực giao. Một hợp ngữ rõ ràng có thể chứa nhiều hơn một không gian tên. Một hợp ngữ có thể mở lại một không gian tên và thêm nhiều hơn vào nó - nói cách khác, các kiểu trong một không gian tên có thể kéo dài nhiều hơn một hợp ngữ.