Perbedaan antara namespace di C # dan paket di Java


98

Apa perbedaan (dalam hal penggunaan) antara namespace di C # dan paket di Java?

Jawaban:


75

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


Jawa

Paket digunakan untuk mengatur file atau tipe publik untuk menghindari konflik tipe. Konstruksi paket dapat dipetakan ke sistem file.

system.security.cryptography.AsymmetricAlgorithm aa;

dapat diganti:

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

Tidak ada alias untuk paket. Anda harus menggunakan pernyataan impor atau nama yang sepenuhnya memenuhi syarat untuk menyebutkan jenis tertentu.

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

atau

package n1.n2;
   class A {}

File sumber lain:

package n1.n2;
   class B {}

Paket tidak dapat disarangkan. Satu file sumber hanya dapat memiliki satu pernyataan paket.

C #

Namespaces digunakan untuk mengatur program, baik sebagai sistem organisasi "internal" untuk suatu program, dan sebagai sistem organisasi "eksternal".

System.Security.Cryptography.AsymmetricAlgorithm aa;

dapat diganti:

using System.Security.Crypography; 
AsymmetricAlgorithm aa;

Alternatifnya, seseorang dapat menentukan alias untuk namespace, misalnya

using myAlias = System.Security.Crypography; 

dan kemudian merujuk ke kelas dengan

myAlias.AsymmetricAlgorithm 

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

atau

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

3
jawaban yang bagus tetapi impor java tidak akan berfungsi. Seharusnya begitu import system.security.crypography.AsymmetricAlgorithm;. Karena di java Anda harus mengimpor kelas, bukan paket. Dimungkinkan untuk mengimpor semua kelas dalam sebuah paket dengan import package.*tetapi itu juga mengimpor kelas, bukan paketnya.
Imus

apakah ada cara untuk namespace di Java tanpa menggunakan begitu banyak folder? Kata namespacekunci di Java akan bagus.

42

Ada beberapa detail yang berbeda.

Di Java, struktur direktori harus sesuai dengan struktur paket. Tidak ada batasan seperti itu di C #.

Di C # Anda dapat memiliki beberapa ruang nama dalam satu file. Di Jawa satu file milik satu paket (lihat sebelumnya).

Java memiliki aksesibilitas default / paket. C # aksesibilitas internal masuk dalam majelis.

Jika Anda menggunakan VS dan Eclipse dan membiarkan mereka menyusun proyek, maka Anda tidak akan merasakan banyak perbedaan.


35

Tidak ada istilah seperti "namespace" di Java - sebuah paket bertindak sebagai namespace di Java, dalam hal menyediakan ruang lingkup untuk nama. Ini juga bagian dari model aksesibilitas.

Dari bagian 7 Spesifikasi Bahasa Java :

Program diatur sebagai kumpulan paket. Setiap paket memiliki kumpulan nama untuk jenisnya sendiri, yang membantu mencegah konflik nama. Jenis tingkat atas dapat diakses (Ā§6.6) di luar paket yang mendeklarasikannya hanya jika jenis tersebut dinyatakan publik.

EDIT: Oke, setelah klarifikasi: paket Java mirip dengan namespace C # - kecuali bahwa hal itu berdampak pada aksesibilitas, sedangkan di namespace C # dan aksesibilitas sepenuhnya ortogonal.


12

Di C ++ / C #, namespace hanya digunakan untuk mempartisi nama untuk menghindari benturan dengan tidak sengaja menggunakan nama yang sama untuk variabel di tempat berbeda.

Di Java, paket jauh lebih dari itu - paket digunakan untuk modul, aspek penamaan hanyalah sebagian darinya.


0

Di java Anda dapat menerapkan berbagai penentu akses ke kelas yang akan berdampak pada paket Anda.

protected: dapat diakses ke paket yang sama dan subkelasnya di paket lain, default: dapat diakses ke paket yang sama, publik: dapat diakses secara universal, pribadi: bahkan tidak dapat diakses oleh paket yang sama.

Jenis penentu akses ini tidak berlaku untuk namespace di c sharp


-2

Namespace sama seperti folder baru, semua subfolder adalah sub-namespace. Jika kita menganggap namespace sebagai fungsi seperti kita memiliki periklanan namespace di bawah namespace pemasaran, maka kita menggunakan marketing.advertising.adsclass.adsmethod. Sangat mudah untuk memecahkan suatu masalah. Java memiliki metode yang sama melalui paket tetapi rumit untuk pendatang baru.

Dalam C #

'' 'pemasaran namespace {

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

     }

}

Untuk digunakan di kelas klien

using marketing;
using marketing.advertising;

'' 'Di java Anda menggunakan metode yang sama. Anda mengemas beberapa kelas dalam satu paket dan menggunakannya berkali-kali. Ini meningkatkan keunikan. Anda menulis sekali dan menggunakannya berkali-kali. Kelas terkait dalam satu paket. Tidak perlu membuat kode berkali-kali.


2
Pertanyaannya adalah tentang perbedaan antara namespace di C # dan paket di Java. Jawaban ini sama sekali tidak membahas hal ini.
Johan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.