top of page

Java ve CSharp Arasındaki Farklar...

Yazarın fotoğrafı: Sevdanur GENC
Sevdanur GENC
10 Tem 2011
3 dakikada okunur

Java ve C# Arasındaki Farklar

Bu yazı, Java programlama dili ile Microsoft’un C# (C Sharp) programlama dili arasındaki farklılıkları ele alan bir derlemedir. Maddeler, bu iki dilin platformlar arasındaki farklılıkları ele almaz. Yalnızca dil seviyesinde bulunan birtakım farklıları listelemek için hazırlanmıştır.  Bu derleme, herhangi bir üstünlük ya da bir dilin diğerinden daha iyi olduğunu göstermek için hazırlanmamıştır. Tamamen kişisel ihtiyaçlar doğrultusunda, C# programlama dili ile uygulama geliştirme durumunda, yararlanılmak için çeşitli kaynaklardan ve kişisel deneyimlerden yola çıkarak hazırlanmıştır.Son olarak bu liste, Java programcılarını hedef alan ve daha çok C# cephesinde bulunan özellikleri öne çıkarmaktadır. Bu yüzden birebir karşılaştırma yazısı olarak da ele alınmayabilir.

Java ve C# Dilleri Arasındaki Farklar

1) Java’da pointer (işaretçi) ve pointer aritmetiği işlemleri yoktur. Buna karşın C#, unsafe block yapıları ile pointer işlemlerine izin verir, her ne kadar bazı kısıtlamalar olsa da. 2) Java, switch yapılarında sadece integer ve char tiplerinde işlem yapar. Her ne kadar enumaration yapısının Java’ya eklenmesi ile bu kısıtlama bir nevi aşılsa da, doğrudan String tipi ile switch komutu kullanılamamaktadır. Ancak C# ile, string tipleri ile de işlem yapılabiliyor. Java 7 ile, bu eksikliğin kapatılması planlanıyor. 3) Partial class yapısı, sınıfların, interfacelerin ve Java’da bulunmayan struct yapısının biden fazla kaynak dosyaya bölünebilmesini sağlar. Partial class özelliği C# da mevcut iken, Java’da bu tür bir özellik bulunmamaktadır. 4) C++ da bulunan virtual method özelliği C# ile de karşımıza çıkıyor. Java’da tüm sınıf methodları otomatik olarak virtual olarak tanımlıdır. Bu sayede, herhangi bir sınıfı genişlettiğinizde (extends) super sınıfın methodlarını herhangi bir ekleme gerektirmeden, doğrudan override edebiliyoruz. Ancak C# da bu böyle değil aynen C++ da olduğu gibidir. C# ile, herhangi bir sınıfın methodunu override etmek için super classda bu method virtual olarak deklare edilmelidir. Java’da final methodlar tanımlayarak, methodların override edilmesini önleyebiliyoruz. 5) Preprocessor (Önişlemci) direktifleri C# ile kullanılabiliyor. Bu sayede, kodun belirli bölgelerini belirli durumlar için derlenmesini sağlayabiliyoruz. Ancak Java’da preprocessor özelliği bulunmuyor. 6) Generic tipler Java ve C# dillerinde mevcut. Ancak Java’da, generic tipler primitive tiplerle kullanılamazken, C# ile kullanılabiliyor. 7) C# da goto komutu varken, Java’da yoktur. 8 ) C# bazı kısıtlamalar dahilinde operator overloading işlemine izin verirken Java, izin vermez. 9) 4. maddedeki özellike doğrultusunda C# da method override işlemini yapabilmek için, override anahtar sözcüğünü kullanmak gerekiyor. Override anahtar sözcüğü kullanılmadan yapılan işlemler C# da, yeni bir method olarak ele alınır. Ancak Java ile herhangi bir anahtar sözcük gerektirmeden doğrudan super class methodlarını override edebiliyoruz. 10) Java daki her primitive data type ın C# da bir karşılığı vardır. Ancak C#, Java’ya oranla çok daha fazla primitive data type sunar. Java’daki tüm primitive typeların aynı isimle karşılığı C# da da bulunmaktadır. Ancak Java’daki byte ın karşılığı C# da sbyte dır. C# byte veri tipi unsigned dır. Bunun haricinde C# Java’da olmayan işaretsiz tamsayı değerleri de sunar. ulong, ushort, uint ve decimal tipler Java’da yoktur. 11) C#, Java’da olmayan method pointerlar sunar. Delegate adı verilen bu yapı ile C# da, methodlar parametre olarak başka methodlara geçirilebiliyor. Delegateler, C# da event handling (olay yönetimi) ve callbackler için kullanılıyor. 12) Olay yönetimi Java’da Observer tasarım şablonu ile gerçekleştirilirken, C# da olay yönetimi, dil seviyesinde delegate ler yardımı ile yapılmaktadır. 13) C# da Java’da bulunan checked exception sistemi yoktur. C# sadece, çalışma zamanında yönetilen unchecked exception sistemini destekler. 14) C#, Java’da setter ve getter methodlar ile yapılabilen instance field işlemlerini Properties adı verilen bir mekanizma ile yapılmasını sağlar. Bu sayede ekstra getter setter methodlar yazılmasına gerek kalmıyor. //TODO 15) C#, Java’da bulunmayan ve indexer adı verilen bir yapı ile [] operatörünü overload ederek, sınıf örnekleri üzerinde array tarzı işlemler yapılabilmesini sağlar. //TODO 16) C# da, C/C++ da bulunan struct yapısı mevcut ve veri tipi olarak kullanılırken Java’da bu yapı bulunmuyor. 17) C# Exception tanımlamak ve yakalamak gibi bir zorunluluk yok. Java, ortaya çıkış felsefesi gereği (robust application) buna izin vermez. 18) Java’da C# da bulunan static class yapısı yoktur. Static sınıflar, instance field, instance constructor gibi yapılara izin vermez. Başka bir sınıf tarafından genişletilemez. 19) C# da iterasyon işlemini kolaylaştırmak için, Java’da bulunmayan yield adında bir anahtar sözcük bulunmaktadır. Ancak tam olarak ne işe yaradığını bilmiyorum. //TODO 20) C# da tam olarak ne işe yaradığını bilmediğim ref ve out gibi anahtar sözcükler ile methodlara parametre geçirilebiliyor. Java’da böyle bir yapı yok. //TODO

Son Yazılar

Hepsini Gör
Ado.Net Entity Framework Ogreniyorum Serisi 00

Ado.Net Entity Framework (EF) verileri ile etkilesim uygulamalari gelistirmek icin kullanilan Ado.Net nesne iliskisel modelleme yazilimi olarak iliskisel veritabani semalarini ve nesneler arasinda ki

 
 
 
LINQ Ogreniyorum Serisi 05

Linq To Sql’de tablolarimizdaki verileri silebilmemiz icin; DataContext icerisinde ki DeleteOnSubmit ve DeleteAllOnSubmit metodlari kullanilmaktadir. Beraberinde SubmitChanges metodu da kodlari eklen

 
 
 
LINQ Ogreniyorum Serisi 04

Linq To Sql’de tablolarimiza verileri guncelleyebilmemiz icin; DataContext icerisinde ki SubmitChanges metodu kullanilmaktadir. Bu komutlari kullanarak DataContext sinifinin yapisina da ihtiyac duyu

 
 
 

Yorumlar


©2026 by Sevdanur Genc

bottom of page