Ad alanı mı, Meclis mi?


Yanıtlar:


102

System.Databir ad alanıdır , System.Data.DLL(dosya) bir derlemedir .

Bir ad alanı, türlerin mantıksal bir gruplamasıdır (çoğunlukla ad çakışmalarını önlemek için). Bir derleme, birden çok ad alanında türler içerebilir ( System.DLLbirkaç tane ... içerir) ve tek bir ad alanı derlemelere yayılabilir (örn. System.Threading).


2
hangi derlemede hangi isim alanının olacağını nasıl belirleyebiliriz?
Ehsan Sajjad

@EhsanSajjad İkisi arasında doğrudan bir ilişki yok. Bir derleme, her biri bir ad alanında bulunan sınıfları içeren kod dosyalarından (genellikle bir proje aracılığıyla) oluşturulur. Dolayısıyla , bir projede hangi dosyaların bulunduğunu seçerek buna dolaylı olarak karar verirsiniz. Bu işe yaramazsa, yeni bir soru sormakta özgürsünüz.
D Stanley

mantıklı. Teşekkürler!!
Ehsan Sajjad

@EhsanSajjad, namespacederlemenizi oluşturmak için derlenen kaynak kodunda C # ifadesini (veya başka bir .NET dilindeki eşdeğerini) kullanarak. İkinci bir derlemenin bir ad alanını yeniden açmasının ve içine daha fazla sınıf eklemesinin mümkün olduğunu unutmayın.
Beton Gannet

60

Ad alanı , sınıfların mantıksal bir gruplamasıdır ve aynı işlevselliğe aittir. YaniSystem.WebveSystem.Dataad alanları vardır

MSDN bunu şu şekilde tanımlar:

Ad alanları C # programlamasında iki şekilde yoğun şekilde kullanılır. İlk olarak, .NET Framework birçok sınıfını düzenlemek için ad alanlarını kullanır İkinci olarak, kendi ad alanlarınızı bildirmek, daha büyük programlama projelerinde sınıf ve yöntem adlarının kapsamını kontrol etmeye yardımcı olabilir.

ad alanı

Derleme , .NET çalışma zamanı ortamı tarafından yürütülebilen (önceden derlenmiş) kod yığınıdır. Bir veya daha fazla Ad Alanı içerir. Bir .NET programı, bir veya daha fazla derlemeden oluşur.

System.Web.dllve System.Data.dllmeclislerdir.

MSDN bunu şu şekilde tanımlar:

Derlemeler, .NET Framework uygulamalarının yapı taşlarıdır; dağıtım, sürüm kontrolü, yeniden kullanım, etkinleştirme kapsamı ve güvenlik izinlerinin temel birimini oluştururlar. Derleme, birlikte çalışmak ve mantıksal bir işlevsellik birimi oluşturmak için oluşturulmuş türler ve kaynaklar koleksiyonudur. Bir derleme, ortak dil çalışma zamanına tür uygulamalarının farkında olması için gereken bilgileri sağlar. Çalışma zamanı için, bir montaj bağlamının dışında bir tür mevcut değildir.

montaj


İki yol? İkincisi nerede? :)
Jugal Thakkar


Biraz daha farklı bir şekilde ifade etmek gerekirse: ad alanlarının iki amacı vardır. Bunlardan biri türler için hiyerarşik bir "içindekiler tablosu" vermektir, böylece onları daha kolay bulabilir veya keşfedebilirsiniz. Ad alanının adını hatırlayabiliyorsanız, IntelliSense size türlerinin kısa bir listesini verir. İkinci amaç, isim çatışmalarını yönetmek ve önlemek. "Sistem", "Microsoft" ve "Windows" ad alanlarından kaçınabiliyorsanız, türlerinizden hiçbirinin Microsoft'unkilerle çakışmayacağını bilirsiniz .
Concrete Gannet

17

Kısacası:

Montaj:

Bir montaj, fiziksel kod gruplamanın temel bir birimini sağlar ve bir Çıkış Birimidir. Bir Dağıtım birimi ve bir sürüm oluşturma birimidir. Derlemeler MSIL kodunu içerir.

Ad alanı:

Bir ad alanı, mantıksal kod gruplamasının temel bir birimini sağlar.Her adın Benzersiz olduğu adların bir koleksiyonudur. Sınıflar Grubu için mantıksal sınır oluştururlar. Ad alanı Proje Özellikleri'nde belirtilmelidir.


15

Kısacası:

  • Derleme bir .exe veya .DLL dosyaları olarak depolanır.
  • Ad alanı, tür adlarını gruplamanın ve ad çakışmaları olasılığını azaltmanın bir yoludur.

İpuçları.

Bir derleme, bir tür koleksiyonu içerir (örneğin, l'assembly System, System, System.IO, ecc dahil birçok ad alanı içerir). Genellikle, derlemenin adı her zaman değil, ancak içerdiği bir ad alanıyla aynıdır.

Diğer derleme ve ad alanları örnekleri.

Derleme 1 ( CoreAssembly.DLL )

Ad alanları içerir Namespace1.subnamespace1

Derleme 2 ( ExtensionCoreAssembly.DLL )

Ad alanları içerir Namespace1.subnamespace1

Bu teknikle, farklı ad alanlarını içeren ve var olan bir montajı başka bir montajla genişleten derleme adını kullanmak mümkündür.

TANIMLAR.

Meclisler

Derleme, mantıksal bir işlevsellik birimi oluşturan türler ve kaynaklar koleksiyonudur. .NET Framework'teki tüm türler derlemelerde bulunmalıdır; ortak dil çalışma zamanı, derlemeler dışındaki türleri desteklemez. Visual Basic .NET ile bir Microsoft Windows® Uygulaması, Windows Hizmeti, Sınıf Kitaplığı veya başka bir uygulama oluşturduğunuzda, tek bir derleme oluşturursunuz. Her derleme bir .exe veya .dll dosyası olarak saklanır. Not Birden çok dosyayı kapsayan montajlar oluşturmak teknik olarak mümkün olsa da, çoğu durumda bu teknolojiyi kullanma olasılığınız yoktur.

İsim alanları

Visual Basic .NET kodunuzu düzenlemenin başka bir yolu da ad alanlarının kullanılmasıdır. Ad alanları, derlemelerin yerine geçmez, ancak derlemeleri tamamlayan ikinci bir organizasyon yöntemidir. Ad alanları, tür adlarını gruplamanın ve ad çakışmaları olasılığını azaltmanın bir yoludur. Bir ad alanı hem diğer ad alanlarını hem de türleri içerebilir. Bir türün tam adı, o türü içeren ad alanlarının birleşimini içerir.

Bağlantı: http://msdn.microsoft.com/en-us/library/ms973231.aspx


14

Bunlar ad alanlarıdır. Assemblies birden fazla ad alanı içerir.Örneğin: System.dllşu ad alanlarını (ve daha fazlasını) içerir:

görüntü açıklamasını buraya girin

Ayrıca bir ad alanı iç içe geçmiş ad alanları içerebilir.Bunlar sadece kodu organize etmek için mantıksal adlardır. Unutmayın, DLLdosyalar ad alanlarını içeren derlemelerdir.

GAColduğu genel birleştirme önbelleği . MSDN'ye göre :

Genel derleme önbelleği, bilgisayardaki çeşitli uygulamalar tarafından paylaşılmak üzere özel olarak belirlenmiş derlemeleri depolar.

Yani yaygın saklanan meclisleri kullanılan GACve bu nedenle size saklanan projesiz takımlarından başvuran olduğu proje dizinine tüm montaj dosyaları kopyalamak gerekmez GAColan Güçlü-Named bir başvuru eklediğinizde assemblies.Normally Dosyanızın Strong-Namedbir kopyası olmayan projenizden derleme, .dllklasörünüzde oluşturulacaktır bin\Debug... Dilerseniz derlemenizi yapabilirsiniz (örneğin, sınıf kitaplığı projesi) Kesin Adlandırılmış.Bkz: Nasıl Yapılır: Güçlü İsim


Öyleyse kim veya ne birden fazla meclisi belirler? Bir grup ad alanıyla bir proje oluşturuyorum. Kaç derlemenin oluşturulacağına ve hangi meclislerin altında hangi ad alanlarının kullanılacağına ne karar verir?
eaglei22

11

Diğerleri bu soruya çok iyi ve ayrıntılı cevaplar verdiler. Ancak emin olmadığınızda MSDN'ye bakabileceğinizi belirtmek isterim. MSDN kitaplığı, herhangi bir türün bulunduğu ad alanını ve derlemeyi çok açık ve basit bir şekilde açıklar . Hatta dosyanın adını söylüyor, (in System.Data.dll)bu yüzden belirsizlik yok.

görüntü açıklamasını buraya girin


9

GAC'de gördüğünüz dosya System.Data.dllbir derlemedir ve System.Data. Referans özelliklerini Visual Studio'da görüntülerseniz şunu görürsünüz:

görüntü açıklamasını buraya girin

Daha sonra, referansa sağ tıklarsanız ve nesne tarayıcısında görünümü seçerseniz, söz konusu montajda ad alanlarını göreceksiniz.

görüntü açıklamasını buraya girin


6

@Amdluigi'nin dediği gibi, "Genellikle, assembly adı her zaman değil ama içerdiği bir ad alanıyla aynıdır".

Studio'daki Nesne Tarayıcısında System.Data.dll'nin bir ekran görüntüsü var. Buradaki sorunları keşfetmek için mükemmel bir örnek. Derlemede bulunan ad alanlarının çoğunun System.Data veya System.Data alt ad alanı olduğuna dikkat edin.

Genel olarak, derleme adlarının içlerindeki ad alanlarıyla ilişkilendirilmesi iyi bir uygulamadır. Studio bir montaj oluşturmak için ilk kez bir proje oluşturduğunda, proje özelliklerinden birinin varsayılan ad alanı olduğuna dikkat edin. Başlangıçta Studio, varsayılan ad alanına projenin kendisiyle aynı adı verir. Bir projeyi yeniden adlandırmayı seçerseniz, varsayılan ad alanını da değiştirmeyi düşünün.

Ekstra iki ad alanı vardır: Microsoft.SqlServer anlaşılabilir. Ayrı bir derlemede paketlemek istemedikleri bazı SQL Server türleri.

Ama System.Xml'de ne var ???? System.Xml.dll derlemesi vardır. Bu ad alanı neden System.Data.dll'de de görünüyor?

Bir derlemenin bir ad alanını yeniden açabileceğine ve ona daha fazlasını ekleyebileceğine dikkat edin - System.Data.dll'nin System.Xml ad alanıyla yaptığı tam olarak budur.

Bunun nedeni, ad alanlarının sıfır performans etkisine sahip olması, ancak derlemelerin çok fazla olmasıdır. Önemli miktarda koda sahip 1000 sınıfınız varsa, çok büyük bir bellek ayak izine sahip tek bir derleme istemezsiniz. Her biri bir sınıfa sahip 1000 montaj da istemezsiniz. Herhangi bir derlemenin içeriği çalıştırılmadan önce belleğe yüklenmesi gerekir. Bir derlemenin makul sayıda birbiriyle ilişkili sınıf içermesini istiyorsunuz, bu nedenle uygulamanız sınıflarından birini elde etmek için bir derleme yüklediğinde, uygulamanın ihtiyaç duyacağı diğer sınıfları ücretsiz olarak alır. Granülarite önemlidir: ne çok büyük ne de çok küçük, tam olarak doğru.

System.Data.dll'nin System.Xml'yi yeniden açtığına ve tam olarak bir sınıf eklediğine dikkat edin: XmlDataDocument. Bu sınıf, ilişkisel verileri bir XML belgesi olarak yorumlamak için kullanılır. Uygulamanız sadece XML kullanıyorsa, bu sınıfa ihtiyacı olmayacaktır. Uygulamanız ilişkisel verilerle ilgileniyorsa, olabilir. Dolayısıyla, XmlDataDocument XmlDocument'ten miras alırken ve System.Xml ad alanında bulunurken, System.Data.dll derlemesinde paketlenir.

Tüm bunlar, yalnızca tek bir kavramın, paketin olduğu Java ile ilgili bir geçmişiniz varsa özellikle önemlidir. .NET'te iki tane derleme ve ad alanı vardır. İkisi ortogonaldir. Bir derleme açıkça birden fazla ad alanı içerebilir. Bir derleme bir ad alanını yeniden açabilir ve ona daha fazlasını ekleyebilir - başka bir deyişle, bir ad alanındaki türler birden fazla derlemeyi kapsayabilir.


3

Assembly, mantıksal birimlerin, Ad Alanının, sınıfların mantıksal olarak gruplandırılmasıdır.

Ad alanı birden çok derlemeye yayılabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.