• Web sitemizin içeriğine ve tüm hizmetlerimize erişim sağlamak için Web sitemize kayıt olmalı ya da giriş yapmalısınız. Web sitemize üye olmak tamamen ücretsizdir.
  • Sohbetokey.com ile canlı okey oynamaya ne dersin? Hem sohbet et, hem mobil okey oyna!
  • Soru mu? Sorun mu? ''Bir Sorum Var?'' sistemimiz aktiftir. Paylaşın beraber çözüm üretelim.

Java ve C# Arasındaki Farklar

Üyelik Tarihi
7 Ocak 2015
Konular
4,091
Mesajlar
4,274
MFC Puanı
40
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

Şimdilik aklıma gelen ve kaynaklardan araştırdığım kadarı ile üzerinde durulması gereken farklar bunlar. Ancak, bu listeyi zamanla genişleterek C# ve Java arasındaki programlama dili seviyesindeki farklılıkları, daha geniş olarak ele almaya devam etmek istiyorum.

Sizinde aklınıza gelen veya listede dikkatinizi çeken herhangi bir eksik ya da ekleme varsa, yorumlarınızla katkıda bulunabilirsiniz.
 
Üst