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….