C# Nedir ?

27 Şubat 2007 – 00:48


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


 


 

Bookmark and Share

Post a Comment

Subscribe without commenting