Không gian tên hoặc Assembly?


83

Tôi đang rất nhầm lẫn giữa Không gian tên và Tập hợp. Là System.DataSystem.WebKhô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_32thư mục. Vậy chính xác thì chúng là gì?


1
Xem stackoverflow.com/questions/668161/… có thể hữu ích một chút.
pswg

Câu trả lời:


102

System.Datalà 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.DLLchứ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).


2
làm thế nào để chúng tôi chỉ định không gian tên nào trong hợp ngữ nào?
Ehsan Sajjad

@EhsanSajjad Không có mối quan hệ trực tiếp giữa hai người. Hợp ngữ được xây dựng từ các tệp mã (thường thông qua một dự án), mỗi tệp chứa các lớp nằm trong một không gian tên. Vì vậy, bạn gián tiếp quyết định điều đó bằng cách chọn tệp nào trong một dự án. Nếu điều đó không hữu ích thì hãy đặt câu hỏi mới.
D Stanley

nó có ý nghĩa. Cảm ơn!!
Ehsan Sajjad

@EhsanSajjad, bằng cách sử dụng namespacecâ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 đó.
Concrete Gannet

59

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.WebSystem.Datalà 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.

không gian tê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.dllSystem.Data.dlllà 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ữ.

hội,, tổ hợp


Hai lối? Cái thứ hai đâu? :)
Jugal Thakkar

1
@JugalThakkar cũng đã thêm nó. xem tại đây để biết thêm chi tiết.
Zaheer Ahmed

Nói khác đi một chút: không gian tên có hai mục đích. Một là cung cấp "mục lục" phân cấp cho các loại để bạn có thể xác định vị trí hoặc khám phá chúng dễ dàng hơn. Nếu bạn có thể nhớ tên của không gian tên, IntelliSense cung cấp cho bạn một danh sách ngắn các loại của nó. Mục đích thứ hai là quản lý và tránh đụng độ tên tuổi. Nếu bạn có thể tránh các không gian tên "Hệ thống", "Microsoft" và "Windows", bạn biết rằng không có loại nào của bạn sẽ xung đột với của Microsoft.
Bê tông Gannet

16

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.


15

Nói ngắn gọn:

  • Assembly được lưu trữ dưới dạng tệp .EXE hoặc .DLL.
  • Không gian tên là một cách nhóm các tên kiểu và giảm nguy cơ xung đột tê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


14

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.

nhập mô tả hình ảnh ở đây

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 DLLtệp là tập hợp chứa (các) không gian tên.

GACGlobal 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 GACvà 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 GACtê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-Namedlà bản sao của .dlltệp của bạn sẽ được tạo trên thư mục của bin\Debugbạ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


Vậy ai hoặc cái gì quyết định nhiều hơn một hội đồng? Tôi tạo một dự án với một loạt các không gian tên. Điều gì quyết định có bao nhiêu tập hợp được tạo ra và không gian tên nào nằm dưới những tập hợp nào?
Eaglei 22

11

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êntậ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ồ.

nhập mô tả hình ảnh ở đây


9

Tệp mà bạn thấy trong GAC System.Data.dlllà 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:

nhập mô tả hình ảnh ở đâ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ập mô tả hình ảnh ở đây


2
Cảm ơn bạn ... lời giải thích rất hay ... :)
user3125433

6

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ữ.


3

Assembly là nhóm vật lý của các đơn vị logic, Không gian tên, nhóm các lớp một cách hợp lý.

Không gian tên có thể mở rộng nhiều cụm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.