C# NameSpace Kavramı yazımız ile c sharp eğitimlerimize son gaz devam ediyoruz. Namespace ‘in Türkçe kaşılığı isim uzayı dır. Programcılar için anlamı ise kütüphanelerdir. Ancak c sharp namespace kavramı sadece c sharp diline özgü birşey değildir. Tüm programala dillerinde var olan bir kavramdır. Namespace’ler programcıların işlerini kolaylaştırmak için üretilmişlerdir. Tüm programcılar bilir ki bir programala dilindeki tüm kodlara hakim olmak olanaksızdır. Kimi resim, video işleme konusunda uzmanken kimisi de veritabanı üzerine işlemlerde uzmanlaşmıştır. Şimdi şöyle bir düşünelim. Kodlarımızı yazarken, neden tüm kodlarını görelim?. Elimizin altında sadece işimize yarayacak kodlar olsa çok daha iyi olmaz mıydı? Bu sorularımızı yanıtlayn şey işte namespace dir. Örneğin C# da System.Data namespace’i olmadan veri tabanı işlemleri yapamayız yada System.IO namespace’i olmadan dosya ve klasör işlemleri yapamayız. Bu şekilde belirli başlıklar altına giren kodlar kütüphanelerde toplanmıştır ve hangi alanda çalışacaksak o kütüphaneleri projemize import eder ve o kütüphanedeki kodları kullanırız.
Bu kütüphaneleri projemize import edebilmek için using anahtar sözcüğünü kullanırız. Mesela Visual studio da yeni bir form açtığınızda aşağıdaki gibi bazı kütüphaneler otomatik olarak eklenir.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
İstersek farklı kütüphaneler de ekleyebiliriz. Ancak şuna dikkat etmeliyiz ki, bildiğimiz tüm kütüphaneleri kullanmayacağımız halde projeye eklememiz bizim zararımıza olacaktır. Kodlarımızı yazarken bize yardımcı olan Intellisense’de (kod tahmin, otomatik tamamlama vs.) dünya kadar kod olacaktır. Bu da bizim yanlış kodları seçmemize neden olabilmektedir.
Elbette ki dünyada sadece .Net kütüphaneleri yoktur. Örnek olarak Visual Studio’da tasarım eklentidi olan DevExpress ‘inde kendi kütüphaneleri vardır. DevExpress’teki nesneleri kullanabilmemiz için DevExpress kütüphanelerini kullanırız. Hatta kendi kütüphanelerimizi yazıp kullanabiliriz…
C Sharp Namespace Kavramı
Tüm bunlar demek değildir ki C# için ayrı VB için ayrı kütüphaneler vardır. .NET Framework sınıf kütüphaneleri birçok dilde kullanılabilir. .NET platform bağımsız bir sınıftır ve hemen hemen tüm programlama dilleri ile kullanılabilirler. Aşağıda 3 farklı programa dilinde yazılmış programcık görebilirsiniz. Her programlama dilinin kendi syntax ları olsa bile temelde kullandıkları kütüphaneler aynıdır ve aynı işlemi yapmaktadırlar.
using System; public class mustafabukulmez_com { public static void Main() { Console.WriteLine ("C# Dili") } }
Imports System Public Module mustafabukulmez_com sub Main() Console.WriteLine ("VB.NET Dili.") End Sub
using namespace System; public static void Main() { Console::WriteLine ("Managed C++ Dili") }
Örneklerde gördüğünüz gibi, bu üç programlama dili de System kütüphanesini kullanarak ekrana mesaj çıkartabiliyorlar.
Alt Kütüphaneler
Bazı kütüphaneler vardır ki kendi içlerinde kütüphanelere bölünmüşlerdir. Mesela System.Data kütüphanesinin içerisinde;
using System.Data.Common; using System.Data.Design; using System.Data.Odbc; using System.Data.OleDb; using System.Data.OracleClient; using System.Data.Sql; using System.Data.SqlClient; using System.Data.SqlTypes;
kütüphaneleri bulunmaktadır.
Diyelim ki prejemizde sql bağlantısı yapmak istiyoruz. Bunu sadece System.Data kütüphanesi ile yapamayız. System.Data.Sql kütüphanesini import etmemiz gerekir. Aksi takdirde yazdığımız kodlar çalışmayacaktır. Visual studio sağolsun, bir yerden kopyaladığınız kodların kütüphanesini daha önce import etmemişseniz, o kodların hangi kütüphanede olduğunu bize söylemekte ve bir tık ile import etmemizi sağlamaktadır. Aşağıdaki ekran görüntüsünde görebilirsiniz.
Eğer projenizde datatable kullanacaksanız System.Data kütüphanesini projeine import etmek zorundasınız. Ama kodu bir yerden aldınız yada kodun nasıl yazıldığını biliyorsunuz. Kodu yazdıktan sonra üzerinde çıkan lamba simgesine tıklayarak, yazdığınız kodun sahip olduğunuz hangi kütüphanelerde geçtiğini bulup gösteriyor. Hangisi size gerekliyse import edebiliyorsunuz.
Inline Kütüphane Import Etmek
Bazen bir iki işlem için gerekli olan kütüphaneleri projemize import etmek istemeyebiliriz. Yada herhangi bir sebeple import alanında o kütüphaneyi import etmememiz gerekir. Bu gibi durumlarda inline using kullanılır.
Ayrıca şu bilgiyi de vermeden geçmeyelim.
Diyelim ki bir klasör eklediniz ve bu klasörün içinde de form açtınız. Bu klasörün adı formun içerisinde tutulur. O formu, klasörden çıkarttıysanız formun cs ve designer.cs dosyalarına gidip formun namespace’ini de düzeltmeniz gerekmektedir. Örnek olarak Sistem klasörü ekledim ve bu klasör içerisine de bir form açtım.
namespace mustafabukulmez_com.Sistem { public partial class XtraForm4 : DevExpress.XtraEditors.XtraForm { public XtraForm4() { InitializeComponent(); } private void XtraForm4_Load(object sender, EventArgs e) { } } }
Kodlara baktığımızda projemin namespace ‘inin mustafabukulmez_com olduğunu görüyoruz. Ama mustafabukulmez_com ‘dan sonra bir de Sistem yazıyor. Orada yazan Sistem o formun mustafabukulmez_com projesindeki Sistem klasöründe olduğunu belirtiyor. Formu solution explorer de başka klasöre taşımanız bu namespace alanını düzeltmemektedir. Taşıma işleminden sonra manuel olarak düzeltmek zorundasınız. Aksi halde projenizde sistem klasörü olmasa bile o formu açmak için;
Sistem.XtraForm4 fr = new Sistem.XtraForm4(); fr.ShowDialog();
şeklinde kod yazmanız gerekecektir. Yani kısacası projede sistem klasörü olmasına rağmen bu form kendini hala sistem klasörü içerisinde olduğunu düşünecektir. Sizde yukarıdaki gibi Başa sistem yazmadan bu formu çağıramayacaksınız.
C Sharp Namespace Kavramı yazımızda bu kadar dostlar. Genel olarak c sharp namespace kavramı bu şekildedir. Yani öyle çok bir esprisi yoktur. İmport eder kullanırsınız. Bilmiyorsanız da visual studio size söyler.
C Sharp Eğitim Seti ve ERP Programlama ders listesi için tıklayınız.
Takipte ve sağlıcakla kalın. ;)