C# NEDİR?
NEDEN C#?
Aslında c#ı tercih etmemizin birçok sebebi var ama en yalın ve anlaşılabilir haliyle şu şekilde sıralayabiliriz:
C#'IN .NET'TEKİ YERİ VE KULLANIM ALANLARI
C# ; C/C++ ve javanın en güzel özelliklerinden örnek alınarak oluşturulmuştur ve .NET için bulunmaz bir fırsattır. Eğer C#’i bilirsek .NET ortamında birçok iş yapabiliriz . C#'ı .NET'te şu şekillerde kullanabiliriz:
C# ; Microsoft'un , Microsoft .NET platformu için sıfırdan geliştirilmiş olduğu bir programlama dilidir. Zamanında Microsoft Java'ya cevap olarak, .NET ile tamamen uyumlu ve .NET'in en gözde dili olan C#'ı geliştirmiş ve bizim hizmetimize sunmuş.C/C++ yada javayı biliyorsak zaten c# öğrenmek bizi zorlamayacaktır.C# Javayı abisi gibi görür ve birçok Javayı alanda kendisine örnek alır.Java gibi C ve C++ kod söz dizilimine benzer bir kod yapısındadır. C# özellikle nesne yönelimli programlama kavramının gelişmesine katkıda bulunan en aktif programlama dillerinden biridir
Dipnot: C# ve Java Orta Düzeyli Diller arasına girmektedir.
NEDEN C#?
Aslında c#ı tercih etmemizin birçok sebebi var ama en yalın ve anlaşılabilir haliyle şu şekilde sıralayabiliriz:
- C# Programlama dili öğrenilmesi kolay bir dildir.
Daha az sayıda anahtar kelime - Nesne Yönelimli Programlamaya tam destek
Büyük ölçekli projeleri hızlı şekilde yapmak. - Yüksek verim
C/C++ = Hata oranı yüksek, hatayı bulmak zor. C# basit hatalar giderilmiştir. Hatayı bulmada yardımcı.. - Güç ve Kolaylık arasındaki denge
VB kolay ama yetenekleri az. C++ güçlü ama zor. - XML desteği
intranet – internet başka sistemlerle kolayca etkileşime geçmesi farklı platformlarda aynı dili konuşmak - Yönetilmeyen Kod
Eski COM ve DLL için kullanırız.
Geriye dönük uyumluluk vardır. - Modern bir dildir.
İnternet cağının tüm özelliklerini barındırır.
C++ kadar güçlü VB kadar yazımı kolaydır.
Geriye dönük olması
C#'IN .NET'TEKİ YERİ VE KULLANIM ALANLARI
C# ; C/C++ ve javanın en güzel özelliklerinden örnek alınarak oluşturulmuştur ve .NET için bulunmaz bir fırsattır. Eğer C#’i bilirsek .NET ortamında birçok iş yapabiliriz . C#'ı .NET'te şu şekillerde kullanabiliriz:
- Konsol uygulaması geliştirme aracı //Siyah bir ekranda çalışmak isteyenlere…
- Windows için program yazma //.NET Framework kurulu olması gerekir. .Net XP ve sonrasında desteklenmektedir.
- ASP.NET için en uygun dil //.NET’in tamamı C# ile yazılmıştır. Asp sadece script yorumlarken C#.Net nesne yönelimlidir.
- Web servisleri //Web üzerinden servis veren program parçacıkları (protokoller vasıtasıyla web servislerine ulaşmak)
- Mobil uygulama geliştirme. // .NET il IP tabanlı tüm cihazlara ulaşmak mümkündür.
- C# ile DLL(Dinamik Link Library) yazabiliriz. //Esnek DLL bileşenleri geliştirip bir çok yerde kullanabiliriz.
.NET'İN BİLEŞENLERİ
Görülen bu karmaşık .NET mimarisi bilgisayarla programlamayı kolay bir şekilde yapmamızı sağlıyor. Şimdi ilk olarak .NETi oluşturan bileşenlere genel olarak yüzeysel bir giriş yapacağım,daha sonra her bir bileşene tek tek değineceğim.
.NET in çalışma mantığı da Java'nınkine benzemektedir. .NET kodu önce IL (ara dil) e derler. ve bu IL kodu çalıştırılmak istendiği zaman .NET CLR (Common Language Runtime-Ortak Çalışma Zamanı) JIT derleyicilerini kullanarak makine diline çevirir. CLR makine diline çevrilmiş program kodunu ön bellekte tutar. Bu büyük performans artışına sebep olurken sistemin hafızasında oldukça büyük bir yer işgal eder.CLR, .NET de programların çalışmasını kontrol eden ve işletim sistemiyle program arasında yer alan birimdir..NET içerisinde farklı dildeki DLL leri kullanabilme kolaylığı sağlayan CTS (Common Type System) özellği vardır. CTS ile VB.NET, C++.NET içerisinde kullanılan veri türleri arasında uyumluluk oluşmuştur. Böylelikle tip güvenliği sağlanır ve herhangi bir .NET uyumlu dilde yazılan bir program diğer .NET uyumlu dillerde de sorunsuz bir şekilde çalışır.
Ortak Dil Çalışma Platformu (CLR- Common Language Runtime)
.NET altyapısında programların çalışmasını kontrol eden, işletim sistemi ile program arasında yer alan ara birimdir.
Şekilde bir .NET programının nasıl derlenip çalıştığını görüyorsunuz. CLR .NET in kalbidir ve 4 çok önemli şeyli yapar:
- Çöp toplama
- CAS (Kod Erişim Güvenliği)
- CV (Kod Doğrulama)
- Yerli çeviri IL
.NET de kütüphanelerle program kodu derlenip Microsoft Ara dili ‘ ne çevrilir. Burada oluşturulan Assembly CLR tarafından herhangi bir sistemde çalıştırılabilir.IL kodu JIT derleyicileri tarafından makine diline çevrilip çalıştırılır.
Ara Dil ( IL- Intermediate Language)
IL içerisinde, değişken tanımları, değişkenlerin nasıl saklanacağı, metotların nasıl çalıştırılacağı, aritmetik işlemler, mantıksal işlemler, bellek kullanımı ve hata yakalama ve yönetimi dahil birçok işin nasıl yapılacağı açıklanır.Bütün bunların yanında IL’de metadata olarak adlandırılan bir birim daha vardır. Metadata, programda kullanılan verilerin tiplerinin yanında oluşturulan sınıfların metotlarını ve bunların özelliklerini ve diğer bilgileri içerir. Metadata'nın içeriği çalışma zamanında JIT derleyicileri tarafında kullanılır.
DİPNOT: C# .Nette derlenen kodumuz olan IL kodu işlemciye bağlı bir kod değildir.IL, daha genel ve taşınabilirdir.
JIT DERLEYİCİLERİ (Just in Time)
C# derleyicisi ile IL’e derlediğimiz programı çalıştırırken JIT derleyicileri devreye girerler.Bu derleyiciler programın çalıştırıldığı sistemin ve işlemcinin anlayabileceği makine kodunu oluştururlar. Metadata’nın içeriği çalışma zamanında JIT derleyicileri tarafından kullanılır. IL ve Metadata’sı oluşturulan kod parçası, çalıştırılabilir bir yapıdadır.
- Normal JIT : Orijinal makine kodu ve önbellek durur.
- Pre-JIT : Tüm program makine koduna çevrilir. Verim arttırılabilir. Küçük programların derlenmesi beklenmez.
- Eco-JIT : Az hafıza az, önbellek varsa hafızayı daha etkin kullanmak için önceden derlenenler silinir.
CTS VE CLS
ORTAK TİP SİSTEMİ(Commen Type System-CTS):
DİPNOT: Programlama dillerinin kullandıkları veri türleri arasında uyumluluk vardır.
Ortak tip sistemi;
- Diğer .Net dilleriyle rahat çalışmamızı sağlar.
- Tam Nesne yönelimli olmasını sağlar
- Oluşturulan yeni nesnelerin diğer .Net dilleriyle sorunsuz çalışması
- gibi özellikleri bize sunar.
ORTAK DİL SPESİFİKASYONU (Common Language Specification - CLS)
Programlama dillerinin sadece verilerinin uyumlu olması yetmez, diller arası etkileşiminin de olması gerekir. Bunun içinde CLS uyumlu olup olmadığına bakılır.
Bu kurallara uyan yaklaşık 30 farklı dil mevcuttur. //C#, C++.Net, VB.Net ve Jscript.Net
.Net mimarisinin temel sınıf kütüphanesi içerisinde yer alan kodların bir çoğu CLS uyumludur.
.NET Assembly Kavramı
.NET platformu için yazacağımız bütün kodların sonucunda oluşan exe ve dll uzantılı dosyalara genel olarak assembly denir.yaptığımız projelerimize ait derlediğimiz kodlar ve metadata (önizleyici kod)buranın içerisinde yer alır. Asıl bilmemiz gereken Assembly içerisinde neleri barındırır ve görevinin ne olduğudur. Assembly 4 kısımdan oluşur.
Kısaca özelliklerinden bahsedecek olursak;
- CIL(IL CODE): Derleme sırasında oluşan kodlardır.
- Metadata: Assembly içerisinde ki tüm üyelerin listesidir. Yazdığımız kodda hangi tiplerin ve üyelerin kullanıldığını gösteren kısımdır.
- Manifesto: Assembly’nin kendisine erişimini ve kendisini tanımladığı bilgileridir. Yapının en üstünde bulunur. Kısacası Assembly’nin kimliği diyebiliriz. Bu kısımda kullanılan dll’lerinde listesini bulmak mümkündür.
- Resources(Kaynaklar): Assembly içerisindeki üyelerin kullandıkları kaynaklardır . Opsiyonel demek daha doğru olacaktır ;kullanıcıya bağlıdır. Yazdığınız uygulamanızda kendi bilgisayarınızdan eklediğiniz bir resim, müzik vb. dosyalarınızın farklı bir bilgisayarda da kullanılabilmesini sağlayan kısımdır.
DİPNOT: Assembly programlama dilini 3 kelime ile tanımlayacak olursak bunlar; GÜÇLÜ, HIZLI ve KISA olurdu.
Assembly dilinin özel kullanım alanları :
- Bilgisayar sistemini yakından tanımak için,
- Device driver (cihaz sürücüleri) yazmak için,
- Chip'lere program yüklemek için (PIC, microcontroller gibi...)
- İşletim sistemlerinin yapımında (OS),
- Şifre kırma ve Hacking işlemleri için,
- Virüs programları yazmak için,
- Elektronik tablolama (Excel gibi) programlarında.
Application Domain: Assemblynin en önemli özelliklerinden biridir.Application domain sayesinde aynı anda çalışan birden fazla program veya proses birbirinden izole edildiği halde sistemde herhangi bir aksaklığa yol açmadan aralarında veri alışverişi yapılabilir.
İSİM ALANLARI VE .NET SINIF KÜTÜPHANESİ
İsim alanlar(namespaces) en temel anlamıyla sınıfları organize etmeye (gruplandırmaya) yarayan bir yapıdır. Namespace.NET Framework sınıf kütüphanesindeki veri türleri ve sınıfları C# dilinde using anahtar sözcüğü ile birlikte kullanılır ve derleyiciye bildirilir. Diğer dillerde ise bu isim alanları farklı şekilde derleyiciye bildirilir.
Şimdide gelelim sınıf kütüphanelerine. .NET için en temel ve en çok kullanılan sınıf kütüphaneleri;
- System : Ortak kullanıma sahip değerleri, referans edilen veri türlerini, olayları ve bu olayların işleyişlerini, çeşitli ara yüzleri, özellikleri ve işlem hatalarını tanımlayan temel sınıfları içerir.
- System.Data : Veritabanı kullanan projelerimizde çok işimize yarayacak olan sınıftır. Ado.Net mimarisinin temelini içinde barındıran sınıflardan oluşur.
- System.Data.OleDb : .Net Data Provider’ı içerir. Bu namespace, veritabanı gibi veri kaynaklarına erişim için bir sınıflar koleksiyonu sağlar.
- System.Data.SqlClient : .Net Data Provider’ı içerir. Bu namespace’te oledb namespace’ine benzer bir şekilde, veritabanı gibi veri kaynaklarına erişim için bir sınıflar koleksiyonu sağlar.
- System.Data.SqlTypes : Sql Server içindeki veri türleri için çeşitli sınıflar tanımlar. Bu sınıflar diğer veri türlerine göre daha güvenli ve hızlıdır. Bu sınıfların kullanılmasıyla birlikte, olası tip dönüşümü sorunları ortadan kalkmaktadır.
- System.Xml : Xml (extensible markup language) dili için standartlara dayalı destek sağlar.
- System.IO : Dosyalar üzerinden okuma ve yazmayı sağlayan veri türlerini içerir.
- System.Net : Bilgisayar ağlarında kullanılan protokoller için ara yüz sağlar. WebRequest ve WebResponse sınıfları, internet kaynaklarını kullanan ağ servislerinin gelişimi için temel oluşturur.
- System.Windows.Forms : Windows tabanlı, Microsoft Windows işletim sisteminin sahip olduğu, zengin kullanıcı ara yüzü olanaklarını kullanan uygulamaları yaratabilmek için gereken tüm sınıfları içerir.
C# KOMUT SATIRI DERLEYİCİSİ
C# ile yazdığımız programlarımızı ya komut satırı derleyicisi yada Visual Studio.NET yardımıyla derleyip çalıştırırız.
DERLEYİCİ AYARLARI
C# derleyicisinin ismi csc.exe'dir.Programı bilgisayarımıza kurduğumuzda derleyici ayarının yapılıp yapılmadığını test etmek için ,komut satırına "csc" yazıp "ENTER" a basmamız yeterli olacaktır.
Böyle bir tabloyla karşılaşırsanız csc derleyicisinin ayarları sisteminizde doğru demektir. Eğer böyle bir sonuç alamazsanız derleyici ayarlarını şu şekilde yapabilirsiniz:
- Control Panel -- System--Advanced--Environmental'ı tıklayınız.
- Sonra karşınıza çıkan pencerede bulunan System Variables kısmından Path'ı çift tıklayınız.
- Karşınıza çıkan iletişim kutusunun alt tarafında yer alan metin kutusuna sonuna;eğer Windows XP kullanıyorsanız :
;C:¬\Windows\Microsoft.NET\Framework\v.1.0.3705; yazınız.
eğer sisteminiz:Windows 2000 ise;
;C\WINNT\Microsoft.NET\Framework\v. 1.0.3705; yazınız.
DİPNOT: Frameworkün versiyon numarası sizin sisteminizde farklılıklar gösterebilir.
Framework, geliştiricilere projelerinde kullanacakları sınıfları,eklentileri vs. toplu bir şekilde sunulması denebilir. Kelime olaraksa uygulama çatısı denilebilir. Sınıflara ve eklentilere örnek vermemiz gerekirse veritabanı bağlantısı, form kontrolleri, resim işleme sınıfları örnek verilebilir.
DERLEYİCİ PARAMETRELERİ
Herhangi bir komut satırında çalışacak programı derlemek için;
csc ProgramAdi.cs
yazıp kaynak kodumuzu derleriz.Derlemeden sonra oluşan ProgramAdi.exe isimli programımızı çalıştırabiliriz. Eğer program kodunun isminden farklı bir exe. oluşturmak istersek,derleme işlemini
csc /out.:YeniProgramAdi.exe ProgramAdi.cs
şeklinde yapabiliriz.C# derleyicisi ile komut satırı uygulamalarının modülleri,dll'leri ve Windows programlarını da derleyebiliriz.
csc /t:library programAdi.cs
Bu komut ProgramAdi.dll şeklinde bir dll dosyası oluşturur.
C# derleyicisi ile komut satırı uygulamalarının modülleri ,dll'leri ve Windows form tabanlı programları da derleyabiliriz.
csc /t:module ProgramAdi.cs
Bu sefer ProgramAdi.netmodule isimli bir derlenmiş .NET modülü elde ederiz ki bu assembly, diğer .NET programları ile birlikte çalışabilir. Yazdığımız program kodu bir Windows uygulaması olacaksa onu derlemek için:
csc / t:winexe ProgramAdi.cs
yazmamız yeterlidir.
C# programlarında nadiren de olsa işaretçi(pointer)kullanırsak bu programları derlerken unsafe(güvenli değil) parametresini kullanmalıyız.
csc / unsafe
Derleyeceğimiz kodda bulunabilecek hatalar için C# derleyicisi bizim için rapor dosyası da hazırlama yeteneğine sahiptir. Bunun için bugreport parametresini kullanırız:
csc /bugreport:RaporDosyasi.txt ProgramAdi.cs
Derleme işleminin sonunda raporu RaporDosyasi.txt dosyasının içinden okuyabiliriz.
Son olarak C# derleyicisinin parametrelerine hızlıca csc /help ve csc /? yazarak ulaşabiliriz.Böylece unuttuğumuz parametrelere buradan göz atabiliriz.