|
C# İsim uzayları (namespace) Hakkında |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu
yazımızda C# dilindeki namespace ler hakkında geniş bir bilgi edineceğiz. Bildiğiniz
gibi programlama dillerinde, programcıların işlerini kolaylaştırmak için bir
takım hazır kütüphaneler mevcuttur, bu kütüphanelerden bazıları standart olmakla
birlikte bazıları programcılar tarafından sonradan geliştirlmiş ve kullanıcların
hizmetine sunulmuştur. Mesela MFC ve ATL gibi kütühanelerin kendilerine has
amaçları vardır, MFC kütüphanesi ile bir takım hazır C++ sınıflarına ulaşarak
temelde zor olan bir takım Windows platformuna özgü işlemleri (forms, dialog
box vs.) yapabiliriz. Bu da MFC programcılarına çalışır bir uygulama yapmak
için daha az zaman harcatır. Bu tür kütüphaneler Visul Basic te ve Java dilinde
de vardır. Fakat bu dillerin aksine C# dili ile gelen hazır bir takım sınıf
kütüphaneleri bulunmamaktadır, kısacası standart bir C# kütüphanesi mevcut değildir.
Bu demek değildir C# ile işimiz daha zor olacak, aslında daha kolay, .NET Framework
dediğimiz altyapının bize veya diğer programlama dillerini kullanan programcılara
sunduğu bir takım temel türler ve sınıflar mevcuttur. Bütün bu sınıfları ve
türleri binary düzeyde iyi oırganize edebilmek için .NET, namespace kavramını
sıklıkla kullanmaktadır. Demekki .NET teki sınıf kütüphaneleri bir dilden bağımsız
bir yapıdadır. MFC gibi sadece C++ için yada başka bir dil için geliştirilmemiştir.
Çok normal olarak Visual Basic.NET kullanıcısı ile C# kullanıcısı aynı kütüphaneden
faydalanırlar.
Namespace ler .NET Framework sınıf kütüphanesindeki veri türlerini ve sınıfları
kullanabilmemiz için C# dilinde using anahtar sözcüğü
ile birlikte kullanılır ve derleyiciye bildirilir. Diğer dillerde ise bu isimalanları
farklı şekilde derleyiciye bildirilir, ama temelde yapılan iş .NET Framework
sınıf kütüphaneslerini kullanma hakkı almaktır. Aşağıda C#, Visual Basic ve
Managed C++ ile yazılmış 3 farklı ama aynı işi yapan 3 program görüyorsunuz.
Programları dikkatlice incelediğinizde namespace lerin sadece eklenme biçimi
ve namespace lerde ki sınıfların sentaks olarak kullanımı farklı. Bize sunudğu
arayüzler ise özel durumlar dışında tamamen aynıdır.
[C#]
using System;
public class C#nedir
{
public static void Main()
{
Console.WriteLine
("Merhaba, beni C# ile yazdılar.")
}
}
[VB.NET]
Imports System
Public Module C#nedir
sub Main()
Console.WriteLine
("Merhaba, beni VB.NET ile yazdılar.")
End Sub
[Managed C++]
using namespace System;
public static void Main()
{
Console::WriteLine ("Merhaba, beni managed
C++ ile yazdılar.")
} |
Yukarıdaki
programlarda gördüğünüz gibi .NET platformunu destekleyen bütün diller aynı
sınıfı kullanarak ekrana yazı yazdırıyorlar.Bu sınıf System isimalanı içinde
bulunan Console sınıfına ait bir fonksiyonla gerçekleştirilmektedir.
Namespace leri kendi yazdığımız kodların organizasyonu içinde kullanabiliriz.
Hem böyle tür isimlerinin karışmasınıda önlemiş oluruz, zira bir tür ismi yada
sınıf ancak kendi isimalanı içinde görünürlüğe(visibility) sahiptir. Mesela
System isimalanını eklemeden Console sınıfını kullanamayız. Aynı şekilde kendi
yazıdğımız sınıfları için de isimalanları tanımlayarak, kaynak kodumuzu istediğimiz
bir şekilde organize edebiliriz. .NET Framework sınıf kütüphanesi hiyerarşik
bir yapıya sahip olduğu için içeiçe isimalanları tanımlanmıştır.
İsimalanlarının kullanımına bir örnek verecek olursak : Diyelimki 2D (iki boyutlu)
grafikleri içeren bir sınıf kütüphanesi geliştiriyoruz, ve bu sınıf kütüphanesi
içinde "Nokta" adlı bir sınıfımız var. Bu isimalanını tanımlamak için
namespace anahtar söcüğünün aşağıdaki gibi bir kullanımı vardır.
namespace
2DGraph
{
public class Nokta
{
......
}
} |
Yukarıdaki
Nokta sınıfını kullanabilmek için programımıza using deyimi ile isimalanını
eklememiz gerekir.Bu işlem aşağıdaki gibi yapılır.
Nihayet
2DGraph isimli sınıf kütüphanesini oluşturduk ve başkalarının kullanımına sunduk.
Bi süre sonra da 3DGraph isimalanı adı altında 3 boyutlu grafik işlemleri yapan
yeni bir sınıf kütüphanesi geliştirdik ve te tekrar programcıların hizmetine
sunduk. Yine aynı şekilde 3 boyutlu noktayı temsil etmek için Nokta sınıfımız
olsun
namespace
3DGraph
{
public class Nokta
{
......
}
} |
Şimdi 2DGrap ve 3DGraph sınıf kütüphanelerinin herikisini birden kullanmak isteyen
bir programcı using ile isimalnlarını ekledilten sonra Nokta türünden bir nesne
oluşturmak istediğinde derleyici bunun 2D Nokta mı yoksa 3D Nokta mı olduğunu
nerden bilecek. Bunu çözmenin iki yolu vardır. Birincisi veri tipi belirlerken
aşağıdaki şekildeki bir kullanım tercih edilir.
Veri türlerinin bu şekilde belirtilmesi pek tercih edilmeyen bir yöntemdir.
Çünkü içiçe bir çok isimalanının tanımlandığı durumlarda kaynak kodumuz gereksiz
yere isimalanlarını yazmakla uzamaktadır. Bu hem okunabilirliği bozmakta hemde
programcıya zaman kaybettirmektedir.
using System;
using 3DGraph;
using 2DGraph;
public class C#nedir
{
public static void Main()
{
3DGraph.Nokta
3dnokta = new 3DGraph.Nokta();
2DGraph.Nokta
2dnokta = new 2DGraph.Nokta();
}
} |
İkinci
bir yöntem ise isimalanlarında bulunan sınıflar için takma isim (alias) kullanmaktır.Bu
sayede isimalanlarını bir kez eklediketen sonra o isim alanında bulunan sınıflara
doğrudan erişebiliriz. Bir isim alanındaki sınıfa takma ad aşağıdaki şekilde
verilir.
using System;
using 3DGraph;
using 2DGraph;
public class C#nedir
{
using Nokta2D= 2DGraph.Nokta;
using Nokta3D =
3DGraph.Nokta;
public static void Main()
{
Nokta2D 2dnokta
= new Nokta2d();
Nokta3D 3dnokta
= new Nokta3d();
}
} |
Yukarıda
mavi yazı ile berlirtilen yerlerde takma isimler tanımlanmıştır. Takma isimler
ancak ve ancak tanımlanadıkları blok içinde geçerlidir. Başka bloklarda takma
adları kullanmak derleme zamanında hataya yol açar.
Sonuç : İsimalanları component(program parçacığı) yazmanın en önemli parçasıdır.
Bir "Merhaba Dünya" programı için isimalanı belitmek sizde takdir
edersinizki pek anlam taşımamaktadır. İsimalanları daha çok kodumuzun tekrar
kullılabilirliğini artırmak için geliştirilen sınıf kütüphanelerinde kullanılırlar.
Makale:
C# İsim uzayları (namespace) Hakkında C#, Visual C# ve .NET Sefer Algan
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|