Tasarım Kodlama

C# namespace Nasıl Kullanılır?

C# namespace nedir?

Anahtar kelimeyi muhtemelen tanırsınız, çünkü C# kodunu içeren dosyaların çoğunda bulunur, genellikle neredeyse en üsttedir. Bir namespace(ad alanı), temel olarak, bir dizi türü, örneğin sınıfları, kendi adlandırılmış alanında gruplandırmanın bir yoludur. Visual Studio sizin için yeni bir proje oluşturduğunda, ilk dosyanızı yerleştirdiği varsayılan bir namespace de oluşturur (en azından bu, Konsol Uygulaması proje türü için geçerlidir). Şuna benzeyebilir:

Bu durumda, “Kodlama” ad alanı artık uygulamanın bir parçasıdır ve sınıflarını bunun dışında kullanırken, sınıf adının önüne namespace adını eklemeniz gerekir. .NET çerçevesinin derinliklerine gömülü bir şey kullanmak istediğinizde de aynı şeyi görürsünüz,

Bu durumda System.IO namespacede bulunan File sınıfında bulunan ReadAllText() yöntemini kullanırız. Elbette, bir namespaceden bir sınıfı her kullanmak istediğinizde bu kadar uzun bir ad yazmak sıkıcı olurdu, bu nedenle C#, bir using ifadesi ile dosyanızın kapsamına tüm bir namespace “içe aktarmanıza” izin verir. Yine, bunları zaten biliyor olabilirsiniz, çünkü bunları genellikle C# dosyalarınızın en üstünde bulabilirsiniz. Yukarıdaki örnek için, File sınıfına bir kereden fazla ihtiyaç duyacaksak, System.IO ad alanını aşağıdaki gibi bir using ifadesiyle içe aktarmak mantıklı olacaktır:

namespace neden kullanılır?

Programlamaya yeni başladıysanız, namespace’e(ad alanı) neden ihtiyacımız olduğunu merak edebilirsiniz. Neden her zaman erişilebilir olmaları için tüm sınıflarınızı aynı ad alanlarına koymuyorsunuz? Projeniz küçükse geçerli bir nedenimiz olabilir. Gittikçe daha fazla sınıf eklemeye başlar başlamaz, onları ad alanlarına ayırmak çok mantıklı olur. Özellikle dosyalarınızı ilgili klasörlere yerleştirirseniz, kodunuzu bulmanızı kolaylaştırır – aslında, projenize bir klasör ekler ve ardından ona bir sınıf eklerseniz, Visual Studio otomatik olarak onu ilgili bir klasöre yerleştirir. Bu nedenle, Kodlama‘da Klasorum adlı bir klasör oluşturursanız, bu klasöre eklenen sınıflar varsayılan olarak Kodlama.Klasorum adlı bir ad alanına yerleştirilecektir.

Ad alanlarının(namespace) neden gerekli olduğuna dair harika bir örnek, .NET çerçevesinin kendisidir. Sadece çerçevedeki TÜM sınıfların küresel bir ad alanında dolaştığını düşünün – bu bir karmaşa olurdu! Bunun yerine, çoğu sınıf için kök ad alanı olarak System ve ardından giriş/çıkış öğeleri için System.IO, ağla ilgili şeyler için System.Net ve postayla ilgili şeyler için System.Net.Mail gibi alt ad alanları olarak onları güzel bir şekilde organize ettiler.

İsimlerin namaspace ile çakışması

Belirtildiği gibi, ad alanları, türlerinizi (genellikle sınıfları) kapsüllemek için de vardır, böylece kendi etki alanlarında var olabilirler. Bu aynı zamanda projenizin başka bir yerinde ve hatta .NET çerçevesinde bulunanlarla aynı ada sahip sınıflar oluşturmakta özgür olduğunuz anlamına gelir. Örneğin, kendinize ait bir File sınıfına ihtiyacınız olduğuna karar verebilirsiniz. Önceki örneklerde gördüğümüz gibi, böyle bir sınıf System.IO ad alanında zaten var, ancak kendi ad alanınızda bir tane oluşturmakta özgürsünüz, bunun gibi:

Şimdi, projenizde kullanmak istediğinizde, örneğin Program.cs Ana yönteminizde (benim gibi bir Konsol Uygulaması üzerinde çalışıyorsanız), tam adı yazabilirsiniz:

Ancak, using ifadesi sayesinde, diğer herhangi bir ad alanında (yerleşik veya kullanıcı tanımlı) yapabileceğiniz gibi ad alanını da içe aktarabilirsiniz. İşte daha eksiksiz bir örnek:

Ancak, System.IO ad alanından File sınıfını da kullanmak isterseniz ne olur? İşte sorun burada başlıyor, çünkü bu ad alanını bir using ifadesi ile içe aktarırsanız, derleyici artık hangi File sınıfına atıfta bulunduğunuzu bilemez – bizimki veya System.IO ad alanından olan. Bu, ad alanlarından yalnızca birini (ideal olarak en çok türünü kullandığınız) içe aktararak ve ardından bu örnekte olduğu gibi diğerinin adını tam olarak nitelendirerek çözülebilir:

Ancak her seferinde yazmak biraz zahmetlidir, özellikle de sınıfınız ad alanlarında daha da derinlerdeyse, örneğin Proje.FileStuff.IO.File. Neyse ki, C# bunun için bir çözüme sahip.

namespace için Takma Ad Yönergesini Kullanma

Ad alanının adını çok kısaltmak için, takma ad kullanma yönergesi ile ad alanını farklı bir adla içe aktarabilirsiniz. Bir sonraki örnekte bunu nasıl yaptığıma dikkat edin:

Sihir, Proje.IO ad alanını çektiğim ve daha sonra türlere erişmek istediğimizde kullanılabilecek daha kısa bir ad (PIO) verdiğim üçüncü satırda gerçekleşir. Bu noktada, çok fazla tuş vuruşunu kurtarmıyoruz, ancak yine daha uzun adlar ve ad alanları düzeyleri hayal etmelisiniz ve inanın bana, oldukça uzun ve iç içe olabilirler.

Özet

Ad alanları, türlerinizi “adlandırılmış alanlara” yerleştirme fırsatı verir; bu, kodunuzda daha iyi bir yapı elde etmenize ve ayrı ad alanlarında bulundukları sürece aynı ada sahip birden çok sınıfa sahip olmanıza olanak tanır.

Yorum yap