Przestrzeń nazw czy zestaw?

84

Jestem bardzo zdezorientowany między przestrzeniami nazw i zestawami. Czy System.Datai System.Webprzestrzenie nazw lub zestawy?

Zauważyłem, że są to nazywane przestrzenie nazw i jednocześnie są obecne w GAC_32folderze. Więc co to właściwie jest?

user3125433
źródło
1
Zobacz stackoverflow.com/questions/668161/ ... to może trochę pomóc.
pswg

Odpowiedzi:

102

System.Datajest przestrzenią nazw , System.Data.DLL(plik) jest zestawem .

Przestrzeń nazw to logiczna grupa typów (głównie w celu uniknięcia kolizji nazw). Zestaw może zawierać typy w wielu przestrzeniach nazw ( System.DLLzawiera kilka ...), a pojedyncza przestrzeń nazw może być rozmieszczona w zespołach (np System.Threading.).

D Stanley
źródło
2
jak określimy, która przestrzeń nazw ma znajdować się w którym zestawie?
Ehsan Sajjad
@EhsanSajjad Nie ma między nimi bezpośredniego związku. Zestaw jest zbudowany z plików kodu (zwykle za pośrednictwem projektu), z których każdy zawiera klasy znajdujące się w przestrzeni nazw. Więc pośrednio decydujesz o tym, wybierając, które pliki są w projekcie. Jeśli to nie pomoże, możesz zadać nowe pytanie.
D Stanley
to ma sens. Dzięki!!
Ehsan Sajjad
@EhsanSajjad, używając instrukcji C # namespace(lub jej odpowiednika w innym języku .NET) w kodzie źródłowym, który jest kompilowany w celu utworzenia zestawu. Zauważ, że drugi zestaw może ponownie otworzyć przestrzeń nazw i dodać do niej więcej klas.
Concrete Gannet
60

Przestrzeń nazw to logiczna grupa klas należących do tej samej funkcjonalności. A więcSystem.WebiSystem.Datasą przestrzeniami nazw

MSDN opisuje to jako:

Przestrzenie nazw są intensywnie używane w programowaniu C # na dwa sposoby. Po pierwsze, platforma .NET Framework wykorzystuje przestrzenie nazw do organizowania wielu klas. Po drugie, zadeklarowanie własnych przestrzeni nazw może pomóc w kontrolowaniu zakresu nazw klas i metod w większych projektach programistycznych.

przestrzeń nazw

Assembly to fragment (prekompilowanego) kodu, który może być wykonywany przez środowisko wykonawcze .NET. Zawiera jedną lub więcej przestrzeni nazw. Program .NET składa się z co najmniej jednego zestawu.

System.Web.dlli System.Data.dllsą zgromadzeniami.

MSDN opisuje to jako:

Zestawy są elementami składowymi aplikacji .NET Framework; tworzą podstawową jednostkę wdrażania, kontroli wersji, ponownego wykorzystania, zakresu aktywacji i uprawnień bezpieczeństwa. Zestaw to zbiór typów i zasobów, które są zbudowane w celu współpracy i tworzą logiczną jednostkę funkcjonalności. Zestaw dostarcza środowisku uruchomieniowemu języka wspólnego informacje, które muszą być świadome implementacji typów. W czasie wykonywania typ nie istnieje poza kontekstem zestawu.

montaż

Zaheer Ahmed
źródło
Dwie drogi? Gdzie jest druga? :)
Jugal Thakkar
1
@JugalThakkar też to dodał. zobacz tutaj, aby uzyskać więcej informacji.
Zaheer Ahmed
Ujmując to nieco inaczej: przestrzenie nazw mają dwa cele. Jednym z nich jest stworzenie hierarchicznego „spisu treści” dla typów, aby można było je łatwiej zlokalizować lub znaleźć. Jeśli pamiętasz nazwę przestrzeni nazw, funkcja IntelliSense udostępnia krótką listę jej typów. Drugim celem jest zarządzanie i unikanie kolizji nazw. Jeśli potrafisz uniknąć przestrzeni nazw „System”, „Microsoft” i „Windows”, wiesz , że żaden z twoich typów nigdy nie będzie kolidował z Microsoft.
Concrete Gannet
17

W skrócie:

Montaż:

Zespół zapewnia podstawową jednostkę fizycznego grupowania kodu, jest to jednostka wyjściowa. Jest to jednostka wdrażania i jednostka wersjonowania. Zestawy zawierają kod MSIL.

Przestrzeń nazw:

Przestrzeń nazw stanowi podstawową jednostkę logicznego grupowania kodu.Jest to zbiór nazw, w których każda nazwa jest unikalna, tworząc logiczną granicę dla grupy klas. Przestrzeń nazw musi być określona we właściwościach projektu.

Anurag Jain
źródło
15

W skrócie:

  • Zespół jest przechowywany jako pliki .EXE lub .DLL.
  • Przestrzeń nazw to sposób grupowania nazw typów i zmniejszania ryzyka kolizji nazw.

Porady.

Zestaw zawiera kolekcję typów (na przykład l'assembly System zawiera wiele przestrzeni nazw, w tym System, System.IO, ecc). Zwykle nazwa zestawu jest taka sama, jak przestrzeń nazw, którą zawiera, ale nie zawsze.

Inny przykład zestawów i przestrzeni nazw.

Zespół 1 ( CoreAssembly.DLL )

Zawiera przestrzenie nazw Namespace1.subnamespace1

Zespół 2 ( ExtensionCoreAssembly.DLL )

Zawiera przestrzenie nazw Namespace1.subnamespace1

Możliwe jest użycie nazwy zestawu zawierającego różne przestrzenie nazw i rozszerzenie istniejącego zestawu innym zestawem za pomocą tej techniki.

DEFINICJE.

Zespoły

Zestaw to zbiór typów i zasobów, który tworzy logiczną jednostkę funkcjonalności. Wszystkie typy w .NET Framework muszą istnieć w zestawach; środowisko uruchomieniowe języka wspólnego nie obsługuje typów poza zestawami. Za każdym razem, gdy tworzysz aplikację Microsoft Windows®, usługę Windows, bibliotekę klas lub inną aplikację w języku Visual Basic .NET, tworzysz pojedynczy zestaw. Każdy zestaw jest przechowywany jako plik .exe lub .dll. Uwaga Chociaż technicznie możliwe jest tworzenie zespołów obejmujących wiele plików, prawdopodobnie nie będziesz używać tej technologii w większości sytuacji.

Przestrzenie nazw

Innym sposobem organizacji kodu w języku Visual Basic .NET jest użycie przestrzeni nazw. Przestrzenie nazw nie zastępują zestawów, ale drugą metodą organizacyjną, która uzupełnia zestawy. Przestrzenie nazw to sposób grupowania nazw typów i zmniejszania ryzyka kolizji nazw. Przestrzeń nazw może zawierać zarówno inne przestrzenie nazw, jak i typy. Pełna nazwa typu obejmuje kombinację przestrzeni nazw, które zawierają ten typ.

Link: http://msdn.microsoft.com/en-us/library/ms973231.aspx

amdluigi
źródło
14

Są to przestrzenie nazw. Zespoły zawierają więcej niż jedną przestrzeń nazw, na przykład: System.dllzawiera te przestrzenie nazw (i więcej):

wprowadź opis obrazu tutaj

Również jedna przestrzeń nazw może zawierać zagnieżdżone przestrzenie nazw. Są to tylko logiczne nazwy służące do organizowania kodu. Pamiętaj, że DLLpliki to zestawy, które zawierają przestrzenie nazw.

GACto Global Assembly Cache . Według MSDN:

Globalna pamięć podręczna zestawów przechowuje zestawy specjalnie przeznaczone do współużytkowania przez kilka aplikacji na komputerze.

Tak powszechnie stosowane zespoły przechowywanych w GACi w związku z tym nie ma potrzeby, aby skopiować wszystkie pliki montażowe do katalogu projektu, które odwołują się ze swoimi zespołami project.The przechowywanych w GACto Strong-Named assemblies.Normally po dodaniu odwołanie do zespół z projektu, który nie jest Strong-Namedkopią swojego .dllpliku zostanie utworzony na bin\Debugfolder..If chcesz można zrobić (projektu biblioteki klasy na przykład) montaż Strong-Named.See: Jak: Zaloguj się zespół z Strong Nazwa

Selman Genç
źródło
Więc kto lub co decyduje o więcej niż jednym zespole? Tworzę projekt z wieloma przestrzeniami nazw. Co decyduje o liczbie tworzonych zestawów i jakie przestrzenie nazw należą do poszczególnych zestawów?
eaglei 22
11

Inni udzielili bardzo dobrych i szczegółowych odpowiedzi na to pytanie. Ale chcę zaznaczyć, że jeśli nie masz pewności, możesz zajrzeć do MSDN. Biblioteka MSDN wyjaśnia bardzo jasno i prosto przestrzeń nazw i zestaw, w którym znajduje się dany typ. Podaje nawet nazwę pliku, (in System.Data.dll)więc nie ma dwuznaczności.

wprowadź opis obrazu tutaj

bouvierr
źródło
9

Plik, który widzisz w GAC System.Data.dll, jest zestawem i zawiera przestrzenie nazw, w tym System.Data. Jeśli wyświetlisz właściwości odwołania w programie Visual Studio, zobaczysz:

wprowadź opis obrazu tutaj

Później, jeśli klikniesz prawym przyciskiem myszy odniesienie i wybierzesz widok w przeglądarce obiektów, zobaczysz przestrzenie nazw w tym konkretnym zestawie.

wprowadź opis obrazu tutaj

Habib
źródło
6

Jak mówi @amdluigi: „Zazwyczaj nazwa zestawu jest taka sama, jak przestrzeń nazw, którą zawiera, ale nie zawsze”.

Powyżej znajduje się zrzut ekranu pliku System.Data.dll w przeglądarce obiektów w Studio. To doskonały przykład, aby zbadać te kwestie. Należy zauważyć, że większość przestrzeni nazw zawartych w zestawie to System.Data lub podprzestrzeń nazw System.Data.

Ogólnie rzecz biorąc, dobrą praktyką jest powiązanie nazw zestawów z przestrzeniami nazw w nich zawartymi. Zauważ, że gdy Studio po raz pierwszy tworzy projekt w celu skompilowania zespołu, jedna z właściwości projektu jest domyślną przestrzenią nazw. Na początku Studio nadaje domyślnej przestrzeni nazw taką samą nazwę, jak sam projekt. Jeśli kiedykolwiek zdecydujesz się zmienić nazwę projektu, rozważ również zmianę jego domyślnej przestrzeni nazw.

Istnieją dwie dodatkowe przestrzenie nazw: Microsoft.SqlServer jest zrozumiały. Niektóre typy SQL Server, których nie chcieli pakować w osobnym zestawie.

Ale o co chodzi z System.Xml ???? Istnieje zestaw System.Xml.dll. Dlaczego ta przestrzeń nazw jest również wyświetlana w pliku System.Data.dll?

Zauważ, że zestaw może ponownie otworzyć przestrzeń nazw i dodać do niej więcej - dokładnie to robi System.Data.dll z przestrzenią nazw System.Xml.

Powodem jest to, że przestrzenie nazw mają zerowy wpływ na wydajność, ale zestawy bardzo dużo. Jeśli masz 1000 klas ze znaczną ilością kodu, nie chcesz jednego zestawu z bardzo dużym zużyciem pamięci. Nie chcesz też mieć 1000 zespołów z jedną klasą. Każdy zestaw musi zostać załadowany do pamięci, zanim jego zawartość będzie mogła zostać wykonana. Chcesz, aby zestaw zawierał rozsądną liczbę wzajemnie powiązanych klas, więc gdy aplikacja załaduje zestaw w celu uzyskania jednej z jego klas, pobierze inne klasy, których aplikacja prawdopodobnie będzie potrzebować za darmo. Ziarnistość jest ważna: nie za duża, nie za mała, w sam raz.

Zwróć uwagę, że System.Data.dll ponownie otwiera System.Xml i dodaje dokładnie jedną klasę: XmlDataDocument. Zdarza się, że ta klasa służy do interpretacji danych relacyjnych jako dokumentu XML. Jeśli twoja aplikacja używa tylko XML, nie będzie potrzebować tej klasy. Jeśli Twoja aplikacja zajmuje się danymi relacyjnymi, może tak. Więc chociaż XmlDataDocument dziedziczy po XmlDocument i znajduje się w przestrzeni nazw System.Xml, jest spakowany w zestawie System.Data.dll.

Wszystko to jest szczególnie ważne, jeśli masz doświadczenie w Javie, gdzie istnieje tylko jedna koncepcja, pakiet. W .NET są dwa, zestaw i przestrzeń nazw. Te dwa są ortogonalne. Zestaw może oczywiście zawierać więcej niż jedną przestrzeń nazw. Zestaw może ponownie otworzyć przestrzeń nazw i dodać do niej więcej - innymi słowy, typy w przestrzeni nazw mogą obejmować więcej niż jeden zestaw.

Głuptak do betonu
źródło
3

Zespół to fizyczne grupowanie jednostek logicznych, Przestrzeń nazw, logiczne grupowanie klas.

Przestrzeń nazw może obejmować wiele zestawów

madhura
źródło