C# GİRİŞ
C# NEDİR???
C ve C++ dilinin ilk bileşen yönelimli dilidir. C#, güçlü, modern, nesne tabanlı ve aynı zaman type-safe(tip-güvenli) bir
programlama dilidir.Aynı zamanda C#, C++ dilinin güçlülüğünü ve Visual Basic’ in ise kolaylığını sağlar.
C# kullanmak için CLR ve .NET Framework sınıf kütüphanesine ihtiyacımız vardır. Bu da demek oluyor ki C#, JAVA, VB
ya da C++ değildir. C,C++ ve JAVA ’nın güzel özelliklerini barındıran
yeni bir programlama dilidir. Sonuç olarak C# ile kod yazmak hem daha
avantajlı hem daha kolay hem de etkileyicidir.
C# programlama dili .NET Framework için kod geliştirmek-desteklemek
amacı ile tasarlanmıştır. C# dilinde kullanılan ve her programlama
dilinde bulunan kütüphaneler aynı zamanda .NET Framework tarafından
kullanılan kütüphanelerdir. Yani C# dilini .NET ortamından ayırsanız
bile bir biri ile sıkı sıkıya bağlıdır.
.NET Framework ve C# ’ın arasındaki en önemli iki ilişki : Ortak dil
çalışma zamanı ( CLR - Common Language Runtime ) ve .NET sınıf
kütüphanesidir.
BİRKAÇ KAVRAMA DEĞİNELİM
C# öğrenmeye başlamadan önce çok fazla karşımıza çıkan bir kaç kavramı
öğrenmekte öğrenilmesinde yarar var şimdi bu kavramlara değinelim:
Microsoft .NET nedir?
Microsoft .NET insanların, bilginin, sistemlerin ve cihazların
iletişimini sağlayan bir platformdur. İstemci ve sunucu uygulamaların
yanısıra geliştirme araçlarını da kapsamaktadır. Bu oluşum içerisinde
ayni zamanda:
Web tabanlı uygulamaların, web servislerinin ve her türlü uygulamanın
geliştirilip çalıştırılabildiği bir platform olan .NET Framework de
bulunmaktadır. .NET Framework ile uygulamalar iletişim
standartlarına(SOAP, XML, HTTP vb) uygun olarak geliştirilebilmektedir.
Visual Studio .NET gibi entegre geliştirme ortamlarına(Integrated
Development Environment - IDE ) ve araçlara sahiptir. Bu araçlar
sayesinde .NET Framework ile uygulama geliştirme daha kolay hale
gelmekte ve verimlilik maksimum düzeye ulaşmaktadır.
Web servisleri ve web tabanlı uygulamalar ile entegre çalışabilen ve bu
uygulamaların kolaylıkla yönetilebildiği Windows Server 2003, Microsoft
SQL Server ve Microsoft Biztalk Server gibi sunucuları da kapsamaktadır.
İstemci(client) ve masaüstü uygulamaların rahatlıkla çalışabildiği
Windows XP, Windows CE ve Microsoft Office gibi platformları da
kapsamaktadır.
.NET Framework nedir?
Microsoft .NET Framework, uygulamaların ve web servislerinin inşa
edilebildiği(build), yayımının yapılabildiği(deploy) ve
çalıştırılabildiği(run) bir platformdur.
’Build - Deploy - Run’ .NET Framework platformu için üç anahtar
kelimedir. Verimliliği yüksek, standartlara uygun ve çoklu dil desteği
bulunan bir platformdur. Internet ölçekli uygulamaların operasyonu ve
yayımlanması için karşımıza çıkan zorluklar .NET Framework’un sağladığı
servisler sayesinde rahatlıkla aşılabilmektedir. .NET Framework iki
temel bölümden oluşmaktadır: Common Lanuguage Runtime, Hiyerarsik
düzendeki sınıf kütüphanesi.
.NET Framework:
20 den fazla programlama diline destek vermektedir
Uygulama geliştiricilerin iş mantığı(business logic) içeren kod kısmına yogunlaşmalarını sağlamaktadır
Güvenli, sağlam, yüksek performanslı uygulamaların geliştirilebilmesini
sağlamaktadır. Eskiye göre; geliştirme, yayımlama ve yönetimin çok daha
kolay olduğu bir platformdur.
Desteklenen Programlama Dilleri
APL Fortran Pascal
C++ Haskell Perl
C# Java Language Python
COBOL Microsoft JScript RPG
Component Pascal Mercury Scheme
Curriculum Mondrian SmallTalk
Eiffel Oberon Standard ML
Forth Oz Microsoft Visual Basic
Common Language Runtime (CLR) nedir?
Common Language Runtime çalışma zamanı servislerinden sorumludur.
Programlama dillerinin entegrasyonu(language integration),
güvenlik(security), bellek(memory), süreç(process) ve thread(is
parçacigi) yönetimi çalışma zamanı servislerindendir. CLR bunun yani
sıra geliştirme zamanında da bazı rollere sahiptir, örneğin tip
güvenliğinin sağlanması gibi.
Common Language Runtime, .NET Framework ile yazılmış uygulamaların işletiminden sorumlu bir motor gibi görev yapmaktadır.
Adından da anlaşılabildiği gibi, farklı dillerde yazılmış uygulamaların
birlikte sorunsuz çalışabildikleri –diller arası
birlikte-(cross-language interoperability) olarak bilinen-bir çalışma
zamanı ortamıdır.
Yönetilen kod(managed code) CLR ile ilgili önemli bir
kavramdır.Yönetilen kod yalnızca CLR nin yardımları altında çalışan
koddur.Bu nedenle CLR tarafından yönetilir.
CLR’nin sağladığı ve sorumlu olduğu bazı servisler aşağıda listelenmektedir:
Kod yönetimi(Code Management): Loading ve Execution
Uygulama belleğinin izolasyonu
Tip güvenliğinin(type safety) dogrulanması
IL(Intermediate Language) kodunun doğal makina koduna(native code) dönüşümünün sağlanması
Metadata(tipe ait detaylandirilmis bilgiler) bilgisine erişimin sağlanması
Yönetilebilir nesnelerin(managed object) bellek yönetiminin sağlanması
Kod erişim güvenliğinin(code access security) uygulanması
İstisna yönetimi(Exception Management)
Yönetilebilir kodlar, COM nesneleri ve hazır DLL’lerin birbirleri arasında işletimlerinin sağlanması
Nesne otomasyonunun sağlanması
Uygulama geliştiriciler için servislerin sağlanması (debugging vb.)
Sınıf Kütüphaneleri
Temel sınıflar; giris/çikis(input/output), string işlemleri, güvenlik
yönetimi, ağ iletişimi, thread yönetimi, metin isleme ve kullanıcı
arayüz tasarımı gibi standart fonksiyonları kapsamaktadır.
ADO.NET sınıflar; OLE DB, ODBC, Oracle ve SQL Server arayüzleri
üzerinden veriye erişimi sağlamaktadır. XML sınıflar ise XML
manipulasyonu, XML veri içerisinde arama yapabilme ve dönüşüm
fonksiyonları gibi temel fonksiyonlara sahiptir. ASP.NET sınıfları web
tabanlı uygulamalar ve web servisleri geliştirebilmek için destek
sağlamaktadır. Windows Forms sınıfları ise masaüstü uygulamaları
geliştirebilmeyi sağlamaktadır.
Sınıf kütüphaneleri, .NET Framework dilleri arasında ortak, tutarlı bir geliştirme arayüzü sağlamaktadır.
Common Type System (CTS) nedir?
CLR içerisine inşa edilmiş güçlü ve zengin bir tip sistemidir(type
system). Çoğu programlama dilinde bulunan tipleri ve bu dillerin
operasyonlarını desteklemektedir. Birçok programlama dilinde bulunan
tiplerin Common Type System içerisinde gerçekleştirimi yapılabilmiş
durumdadır.
Common Language Specification (CLS) nedir?
Common Language Specification(CLS), bünyesinde barındırdığı birtakım
yapıları ile kütüphane(library) ve derleyici(compiler) yazabilmek için
rehberlik yapmaktadır. CLS, yazılan bir kütüphanenin CLS’yi destekleyen
diğer programlama dilleri ile entegre şekilde çalışabilmesini ve bu
diller tarafından da kullanılabilmesini sağlamaktadır. CLS, CTS’nin bir
altkümesidir. CLS uygulama geliştiriciler için büyük önem
arzetmektedir. Öyle ki bir uygulama geliştirici yazdığı kodun diğer kod
geliştiriciler tarafından da kullanılabilir olmasını gözönünde
bulundurmalıdır. CLS’nin kriterleri ve kuralları gözönünde
bulundurularak yazılan bir API(Application Program Interface), diger
programlama dilleri içerisinden kullanılabilmekte, Common Language
Runtime tarafından da isletilebilmektedir.
Microsoft Intermediate Language (MSIL) nedir?
MSIL işlemciden bağımsız komut setinden oluşmaktadır. Bu komut seti
içerisinde nesnelerin yüklenmesi, depolanması ve initialize edilmesini
sağlayan komutların yanı sıra ayni zamanda nesneler üzerinde metod
çağrımını sağlayan komutlar da yeralmaktadır. .NET Framework ile
yazılmış bir kaynak kodun derlenmesi sonucu MSIL kodu oluşmaktadır.
MSIL, Metadata ve CTS sayesinde .NET dilleri arasında bir bütünleşme
sağlanmaktadır. MSIL kodun çalıştırılmasından önce varolan MSIL kodu
doğal makina koduna(native code) dönüştürülmektedir. Interpretation
dediğimiz yorumlama işlemi yapılmaz.
Managed Code ve Managed Data nedir?
Kodun çalıştırılabilmesi için gerekli servislerin ve hizmetlerin Common
Language Runtime’dan alındığı koda ’Managed Code(Yönetilebilir Kod)’
denilmektedir. CLR tarafından gerekli servis ve hizmetlerin
alinabilmesi için yönetilebilir kodun bilgisinin(metadata) bulunması
gerekmektedir. Kodun çalıştırılabilmesi için çalışma zamanında bu bilgi
CLR tarafından kullanilacaktır. C#, Visual Basic .NET ve Jscript.Net
ile yazilan kodlar yönetilebilir kodlardır. Visual Studio.NET
içerisinde yazılan C++ kodu varsayılan olarak yönetilemeyendir. C++
kodunun derleme sonrası oluşan kodun yönetilebilir olmasını sağlamak
için derleme işlemi sırasında ’/CLR’ parametresinin de belirtmek
gerekmektedir.
Veri(data) için gerekli yer tahsisinin CLR tarafıundan yapıldığı veriye
’Managed Data(Yönetilebilir Veri)’ denilmektedir. Ayni şekilde veri
için bellekte tahsis edilmiş yerin tekrar geri alınması işlemi CLR
içerisinde bulunan Garbage Collector tarafından yapılmaktadır. C#,
Visual Basic .NET ve Jscript.Net verileri varsayılan olarak
yönetilebilir verilerdir. C# verileri program içerisinde belirtilecek
anahtar kelimelerle yönetilemeyen(unmanaged) veri olarak
belirlenebilmektedir. Visual Studio.NET C++ verisi varsayılan olarak
yönetilemeyen veridir. /CLR parametresinin verildiği durumda veri
yönetilebilir olmaktadır. Ancak C++’in yönetilebilir uzantıları
(Managed Extension) ile yazılan bir sınıfın ’_gc’ anahtar kelimesi ile
tanımlanması bu sınıftan oluşturulan nesnelerin yönetilebilir olmasını
sağlamaktadır. Anahtar kelimeden(_gc) anlaşılacağı gibi veri Garbage
Collector tarafından yönetilmektedir. C++ ile yazılan bu yönetilebilir
sınıf diğer .NET dilleri tarafından da kullanılabilmekte. Yönetilebilir
C++ sınıfı özelliklerini bir C# sınıfından kalıtım (inheritance) ile
alabilmektedir. Ancak C++ yönetilebilir sınıfı kalıtım(inheritance)
yoluyla en fazla bir adet sınıftan özelliklerini alabilmektedir
HERYÖNÜYLE C#
Otomatik Bellek Yönetimi(Garbage Collection) :
C dilinde ve C++ dillerinde bellek yönetimi tamamen programcının
elindedir. Bir nesne oluşturulduğunda, kullanıldığında ve daha sonra
işi bittiğinde programcı nesne için bellekte ayrılan yeri iade eder.
C#’ta bir nesne kendisine işaret eden bir referans olmadığında
bellekten silinir. Tabi bu nesnenin işi biter bitmez gerçekleşmez.
Nesnenin bellekten silineceği zamanı yine Garbage Collector belirler.
Tip Güvenlidir : Bool tipinden Integer tipine yada türetilen sınıftan taban sınıfa doğrudan tür dönüşümü gerçekleşmez.
Overloading : Function Overloading ve Operator Overloading özelliklerini destekler.
Function Overloading aynı isimdeki fonksiyonların değişik tip ve
sayıdaki parametreler alarak hangisinin çağrılmasına derleyici
tarafından karar verilmesini sağlayan mekanizmadır. Gerek fonksiyonlar
için olsun gerekse operatörler için,Overloading nesnel yönelimli
dillerde genelde varolan bir yöntemdir.
Göstericiler : Gösterici (pointer) işlemlerini
destekler. Güvenli kod(safe code) yazılabileceği gibi C dilindeki
göstericileri C# ile kullanabiliriz.
Değer Tipleri (value types): C Sharp’ta
oluşturulan sınıflar(class) referans tipindedir. Yapılar(struct) ile
oluşturulan tipler ise değer tipindedir ve bellekte heap alanında
tutulmaz.
İsimuzayları (Namespace) : C Sharp’ta her
sınıf bir isimuzayının parçasıdır. İsimuzayları benzer işlevlere sahip
sınıfları, yapıları veya enumatörleri (enumaration) gruplamak için
kullanılır.
Yukarıda geçen özelliklerin yanısıra C Sharp 2.0 ile eklenen yeni özellikler olmuştur.
C Sharp ile yazılan uygulamaların (bu bir windows, web yada console
uygulaması olabilir) çalıştırılabilmesi için .NET Framework yazılımının
kurulması gerekir. C Sharp uygulamaları .NET kütüphanesi içerisindeki
sınıfları kullanır. C Sharp bir programlama dilidir ve .NET kütüphanesi
içerisindeki sınıflardan faydalanılarak uygulama geliştirilir. Bu
yüzden yazılan uygulamaların çalıştırılacağı makinede .NET Framework
bulunmalıdır.
C#dili bileşiktir-herşey bir nesnedir.Kutulama ve kutuyu açma gibi
kavramların yenilikçi kullanımı ile C# ,her veri parçasının bir nesne
olarak değerlendirilmesine olanak sağlayarak , değer türleri (value
type) ve başvuru türleri (referance type) arasındaki açığı kapatır.
C# özellik yönetim ve olaylar temellidir.Birçok dil, dil ve ilişkili
çerçeveler içerisinde gereksiz uyuşmazlıklar oluşturarak, özellikler ve
olaylar için gerçek desteği gözardı eder.
C# bileşenler hakkında bildirimsel bilginin tanımlanması ve kullanılmasını sağlayan nitelikleri destekler.
Birçok syntax hatası derleme zamanında bulunur..
.Net framework yüklü tüm platformlarda çalışır…
C#, Visual Basic ile C++ arasında bulunan boşluğu gidermek için dizayn
edilmiştir. C#, C++ ile yazılabilen ve yazılırken C++ kadar zor olmayan
aynı zamanda Visual Basic’ten daha yüksekte program yazmak isteyen
yazılımcıları hedef almıştır. C++ ve VB
arasındaki boşluğu dolduran ve pek tatmin edici olmayan J++ bu durumuna
rağmen C# ile birçok yönden benzerlik göstemektedir. C#, C++’ın
syntax’ına çok benzeyen bir syntax’a sahiptir ve C++’ın birçok
özelliğini destekler örneğin inheritence (multiple olmamasına rağmen).
Bu nedenle C++ programcıları C#’ı çok kolay bir şekilde
öğrenebileceklerdir. Visual Basic programcıları kendilerini yepyeni bir
syntax ve birçok object oriented kavramı ile karşı karşıya
bulacaklardır ancak C#’ı öğrenmek, C++’ı öğrenmekten çok daha kolaydır.
.NET framework’ü, kullanılan kaynakları boşaltmakta çok başarılıdır. Bu
başarının sırrı ise managed code içerisindeki değişkenlerin stack
yerine managed heap’de tutulmasıdır.
C# ise her iki dünyanın avantajlarını bize sunmaktadır. Tam anlamıyla
inheritence’ı destekler fakat bunun yanısıra .NET framework’ü source
dosyalarımıza ulaşmadan inheritence sağlayabilmek için compile edilmiş
durumda bulunan library dosyalarını (assembly) sağlar. Bu sayede .NET
programcılık tarihinde ilk kez programlama dilleri arasında çapraz
geçişlere izin veren ve gerçek anlamda bir yeniden kullanım olanağı
sağlayan bir platform olmuştur.
C# memory management’ta Visual Basic’in yolunu izler, yani sorumluluk dilin kendisindedir. Ancak VB’nin
aksine C#’da memory’yi kendiniz sınıflandırmak isterseniz yazdığınız
kodun bir bölümünü unsafe olarak belirtebilir ve sonra da C++’da olduğu
gibi Memory için yer ayırıp daha sonra bu kısmı boşaltabilirsiniz.
Dil olarak C# nerededir
C# orta seviye bir programlama dilidir. Bir sıralama yapacak olursak C#’ın bu sıralamadaki yeri aşağıdaki gibi olacaktır.
Assembly
C,C++
C#,J++
Visual Basic
VBA, Scripting Dilleri
Listemizde yukarıdan aşağıya doğru inecek olursak aşağıya indikçe
dillerin öğrenimi kolaylaşır.Daha az kod yazarak ve daha az zaman
harcayarak istediğimiz projeleri gerçekleştirebiliriz.
Son olarak bir yazılımcı kullandığı dilin
piyasadaki değerini ve ticari yönünüde takip etmek zorundadır..C# ın
piyasası ortada tartışmaya bile değmez.İş ilanlarını takip ediyorsanız
C#, ASP.NET ve SQL bilen elemanlara çok fazla ihtiyaç duyulmaktadır….