Różnica między przestrzenią nazw w C # a pakietem w Javie


98

Jaka jest różnica (w zakresie użytkowania) między przestrzeniami nazw w C # a pakietami w Javie?

Odpowiedzi:


75

Od: http://www.javacamp.org/javavscsharp/namespace.html


Jawa

Pakiety służą do organizowania plików lub typów publicznych w celu uniknięcia konfliktów typów. Konstrukcje pakietu można odwzorować na system plików.

system.security.cryptography.AsymmetricAlgorithm aa;

można wymienić:

import system.security.Crypography; 
class xxx { ...
AsymmetricAlgorithm aa;

Nie ma aliasu dla pakietów. Musisz użyć instrukcji importu lub w pełni kwalifikowanej nazwy, aby wspomnieć o konkretnym typie.

package n1.n2;
    class A {}
    class B {}

lub

package n1.n2;
   class A {}

Inny plik źródłowy:

package n1.n2;
   class B {}

Nie można zagnieżdżać pakietu. Jeden plik źródłowy może mieć tylko jedną instrukcję pakietu.

DO#

Przestrzenie nazw służą do organizowania programów, zarówno jako „wewnętrzny” system organizacyjny programu, jak i jako „zewnętrzny” system organizacyjny.

System.Security.Cryptography.AsymmetricAlgorithm aa;

można wymienić:

using System.Security.Crypography; 
AsymmetricAlgorithm aa;

Alternatywnie można określić alias dla przestrzeni nazw, np

using myAlias = System.Security.Crypography; 

a następnie odwołaj się do klasy za pomocą

myAlias.AsymmetricAlgorithm 

namespace N1.N2
{
    class A {}
    class B {}
}

lub

namespace N1
{
    namespace N2
    {
        class A {}
        class B {}
    }
}

3
świetna odpowiedź, ale myślę, że import Java nie zadziała. Tak powinno być import system.security.crypography.AsymmetricAlgorithm;. Ponieważ w java musisz zaimportować klasę, a nie pakiet. Jest możliwe zaimportowanie wszystkich klas w pakiecie z, import package.*ale to również importuje klasy, a nie pakiet.
Imus

czy istnieje sposób na przestrzeń nazw w Javie bez używania tak wielu folderów? Słowo namespacekluczowe w Javie byłoby fajne.

42

Jest kilka szczegółów, które się różnią.

W Javie struktura katalogów powinna odpowiadać strukturze pakietu. Nie ma takiego ograniczenia w C #.

W C # możesz mieć wiele przestrzeni nazw w jednym pliku. W Javie jeden plik należy do jednego pakietu (patrz poprzedni).

Java ma domyślną dostępność / pakiet. C # wewnętrzna dostępność idzie w zestawach.

Jeśli użyjesz VS i Eclipse i pozwolisz im ustrukturyzować projekt, nie poczujesz zbytnio różnic.


35

W Javie nie ma takiego terminu jak „przestrzeń nazw” - pakiet działa jednak jak przestrzeń nazw w Javie, jeśli chodzi o udostępnianie zakresu nazw. To także część modelu dostępności.

Z sekcji 7 specyfikacji języka Java :

Programy są zorganizowane jako zestawy pakietów. Każdy pakiet ma własny zestaw nazw typów, co pomaga zapobiegać konfliktom nazw. Typ najwyższego poziomu jest dostępny (§6.6) poza pakietem, który deklaruje go tylko wtedy, gdy typ jest zadeklarowany jako publiczny.

EDYCJA: OK, po wyjaśnieniu: pakiet Java jest podobny do przestrzeni nazw C # - poza tym, że ma wpływ na dostępność, podczas gdy w C # przestrzenie nazw i dostępność są całkowicie ortogonalne.


12

W C ++ / C # przestrzenie nazw są używane tylko do partycjonowania nazw, aby uniknąć kolizji przez przypadkowe użycie tej samej nazwy dla zmiennej w różnych miejscach.

W Javie pakiety to znacznie więcej niż tylko to - pakiety są używane jako moduły, a aspekt nazewnictwa jest tylko częścią tego.


0

W java możesz zastosować różne specyfikatory dostępu do klas, które będą miały wpływ na twoje pakiety.

chroniony: dostępny dla tego samego pakietu i jego podklas w innym pakiecie, domyślnie: dostępny dla tego samego pakietu, publiczny: powszechnie dostępny, prywatny: nawet niedostępny dla tego samego pakietu.

Ten typ specyfikatorów dostępu nie ma zastosowania do przestrzeni nazw w cis


-2

Przestrzeń nazw jest jak nowy folder, wszystkie podfoldery są pod-przestrzeniami nazw. Jeśli weźmiemy pod uwagę przestrzeń nazw jako funkcję, tak jak mamy reklamę przestrzeni nazw w przestrzeni nazw marketingowych, używamy marketingu.advertising.adsclass.adsmethod. Bardzo łatwo rozwiązać problem. Java ma tę samą metodę za pośrednictwem pakietu, ale jest złożona dla nowych użytkowników.

W C #

'' 'marketing przestrzeni nazw {

           class admissions{
                     int admissions_method(){
                     }
           }
     namespace advertising{
           class  advertisement{
                    void ad_in_newspaper( int no_of_lines){
                    }
                    void ad_on_tv(int seconds){
                    }

     }

}

Do użycia w klasie klienta

using marketing;
using marketing.advertising;

'' 'W javie używasz tej samej metody. Pakujesz wiele zajęć w jeden pakiet i używasz go wiele razy. Zwiększa wyjątkowość. Piszesz raz i używasz wiele razy. Powiązane zajęcia w jednym pakiecie. Nie ma potrzeby kodowania wiele razy.


2
Pytanie dotyczy różnicy między przestrzeniami nazw w C # a pakietami w Javie. Ta odpowiedź w ogóle tego nie dotyczy.
Johan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.