elektrik port üyelik servisleri elektrik port üyelik servisleri

JAVA mı C# mı Sorusu Yanıta Ulaştı

Yazılım alanında bir çok programcı hangi yazılım dilini öğrenip kullanıcaklarına tam olarak karar veremiyorlar. Microsoft'un tekelindeki C# mı yoksa Oracle elinde bulundurduğu Java mı önce yoksa aralarında hiç bir fark yok mu ? Java ve C# her yönüyle karşılaştırıldı ve bir sonuca varıldı.



A- A+
18.05.2013 tarihli yazı 67891 kez okunmuştur.

Java'nın Doğuşu


Java; uzun süren çalışmalar sonunda ortaya çıkarılan bir dildir. Aslında daha 1970'li yıllarda C++ temelli bir dil oluşturma fikri ortaya atılmıştı. Aslında bu dili oluştururken en büyük amaç platform bağımsız bir dil oluşturmaktı. Daha sonra Sun, Java'nın özelliklerini basit, nesneye yönelik, dağıtılmış, yorumlanan, sağlam, güvenli, ortam bağımsız, taşınabilir, yüksek performanslı, çok görevli ve dinamik olarak sıralamıştır. Yıllar geçtikçe Java oldukça popüler bir dil olmuştur.
 

C# Oluşumu


Daha sonra sektörün büyük büyük şirketleri Java hakkında bir toplantı yaparlar. Bill Gates de bu toplantıya girer ve Java'yı standart olarak Windows içerisinde sunmak ister. Toplantıdaki şirket yöneticileri Bill Gates'i tekelcilikle suçlayıp kovarlar. Bill Gates de istediğini yapamayacağını anlayınca Delphi'yi yazan Anders Hejlsberg'i çağırır ve yanına da Scott Wiltamuth'u verir; oturun Java gibi güzel bir dil yazın der. Onlar da C#'ı yazarlar. Projenin yönetimi Anders Hejlsberg'de olduğundan Delphi bilenlerin de fark edebileceği gibi C#'ın fonksiyon isimleri Delphi'ninkilere benzer.


AYNI İŞLEVİ GÖREN JAVA VE C # KODLARININ KARŞILAŞTIRILMASI

 
Java Program Structure C#
package hello;

public class HelloWorld {
   public static void main(String[] args) {
      String name = "Java";

      // See if an argument was passed from the command line
      if (args.length == 1)
         name = args[0];

      System.out.println("Hello, " + name + "!");
    }
}
using System;

namespace Hello {
   public class HelloWorld {
      public static void Main(string[] args) {
         string name = "C#";

         // See if an argument was passed from the command line
         if (args.Length == 1)
            name = args[0];

         Console.WriteLine("Hello, " + name + "!");
      }
   }
}
Java Comments C#
// Single line
/* Multiple
    line  */

/** Javadoc documentation comments */
// Single line
/* Multiple
    line  */

/// XML comments on a single line
/** XML comments on multiple lines */
Java Data Types C#

Primitive Types
boolean
byte
char
short, int, long
float, double


Reference Types
Object   (superclass of all other classes)
String
arrays, classes, interfaces

Conversions

// int to String
int x = 123;
String y = Integer.toString(x);  // y is "123"

// String to int
y = "456"; 
x = Integer.parseInt(y);   // x is 456

// double to int
double z = 3.5;
x = (int) z;   // x is 3  (truncates decimal)

Value Types
bool
byte, sbyte
char
short, ushort, int, uint, long, ulong
float, double, decimal
structures, enumerations

Reference Types
object    (superclass of all other classes)
string
arrays, classes, interfaces, delegates

Convertions

// int to string
int x = 123;
String y = x.ToString();  // y is "123"

// string to int
y = "456";
x = int.Parse(y);   // or x = Convert.ToInt32(y);

// double to int
double z = 3.5;
x = (int) z;   // x is 3  (truncates decimal)

Java Constants C#
// May be initialized in a constructor
final double PI = 3.14;
const double PI = 3.14;

// Can be set to a const or a variable. May be initialized in a constructor.
readonly int MAX_HEIGHT = 9;

Java Enumerations C#

enum Action {Start, Stop, Rewind, Forward};

// Special type of class
enum Status {
  Flunk(50), Pass(70), Excel(90);
  private final int value;
  Status(int value) { this.value = value; }
  public int value() { return value; }
};

Action a = Action.Stop;
if (a != Action.Start)
  System.out.println(a);               // Prints "Stop"

Status s = Status.Pass;
System.out.println(s.value());      // Prints "70"

enum Action {Start, Stop, Rewind, Forward};

enum Status {Flunk = 50, Pass = 70, Excel = 90};

No equivalent.





Action a = Action.Stop;
if (a != Action.Start)
  Console.WriteLine(a);             // Prints "Stop"

Status s = Status.Pass;
Console.WriteLine((int) s);       // Prints "70"

Java Operators C#

Comparison
==  <  >  <=  >=  !=

Arithmetic
+  -  *  /
(mod)
/   (integer division if both operands are ints)
Math.Pow(x, y)

Assignment
=  +=  -=  *=  /=   %=   &=  |=  ^=  <<=  >>=  >>>=  ++  --

Bitwise
&  |  ^   ~  <<  >>  >>>

Logical
&&  ||  &  |   ^   !

Note: && and || perform short-circuit logical evaluations

String Concatenation
+

Comparison
==  <  >  <=  >=  !=

Arithmetic
+  -  *  /
(mod)
/   (integer division if both operands are ints)
Math.Pow(x, y)

Assignment
=  +=  -=  *=  /=   %=  &=  |=  ^=  <<=  >>=  ++  --

Bitwise
&  |  ^   ~  <<  >>

Logical
&&  ||  &  |   ^   !

Note: && and || perform short-circuit logical evaluations

String Concatenation
+

Java Choices C#

greeting = age < 20 ? "What's up?" : "Hello";

if (x < y)
  System.out.println("greater");

if (x != 100) {   
  x *= 5;
  y *= 2;
}
else
  z *= 6;

int selection = 2;
switch (selection) {     // Must be byte, short, int, char, or enum
  case 1: x++;            // Falls through to next case if no break
  case 2: y++;   break;
  case 3: z++;   break;
  default: other++;
}

greeting = age < 20 ? "What's up?" : "Hello";

if (x < y) 
  Console.WriteLine("greater");

if (x != 100) {   
  x *= 5;
  y *= 2;
}
else
  z *= 6;

string color = "red";
switch (color) {                          // Can be any predefined type
  case "red":    r++;    break;       // break is mandatory; no fall-through
  case "blue":   b++;   break;
  case "green": g++;   break;
  default: other++;     break;       // break necessary on default
}

Java Loops C#

while (i < 10)
  i++;

for (i = 2; i <= 10; i += 2) 
  System.out.println(i);

do
  i++;
while (i < 10);

for (int i : numArray)  // foreach construct 
  sum += i;

// for loop can be used to iterate through any Collection
import java.util.ArrayList;
ArrayList<Object> list = new ArrayList<Object>();
list.add(10);    // boxing converts to instance of Integer
list.add("Bisons");
list.add(2.3);    // boxing converts to instance of Double

for (Object o : list)
  System.out.println(o);

while (i < 10)
  i++;

for (i = 2; i <= 10; i += 2)
  Console.WriteLine(i);

do
  i++;
while (i < 10);

foreach (int i in numArray) 
  sum += i;

// foreach can be used to iterate through any collection 
using System.Collections;
ArrayList list = new ArrayList();
list.Add(10);
list.Add("Bisons");
list.Add(2.3);

foreach (Object o in list)
  Console.WriteLine(o);

Java Arrays C#
int nums[] = {1, 2, 3};   or   int[] nums = {1, 2, 3};
for (int i = 0; i < nums.length; i++)
  System.out.println(nums[i]);

String names[] = new String[5];
names[0] = "David";

float twoD[][] = new float[rows][cols];
twoD[2][0] = 4.5;

int[][] jagged = new int[5][];
jagged[0] = new int[5];
jagged[1] = new int[2];
jagged[2] = new int[3];
jagged[0][4] = 5;

int[] nums = {1, 2, 3};
for (int i = 0; i < nums.Length; i++)
  Console.WriteLine(nums[i]);

string[] names = new string[5];
names[0] = "David";

float[,] twoD = new float[rows, cols];
twoD[2,0] = 4.5f;

int[][] jagged = new int[3][] {
    new int[5], new int[2], new int[3] };
jagged[0][4] = 5;

Java Functions C#
// Return single value
int Add(int x, int y) {
   return x + y;
}

int sum = Add(2, 3);

// Return no value
void PrintSum(int x, int y) {
   System.out.println(x + y);
}

PrintSum(2, 3); 

// Primitive types and references are always passed by value
void TestFunc(int x, Point p) {
   x++;
   p.x++;       // Modifying property of the object
   p = null;    // Remove local reference to object
}

class Point {
   public int x, y;
}

Point p = new Point();
p.x = 2;
int a = 1;
TestFunc(a, p);
System.out.println(a + " " + p.x + " " + (p == null) );  // 1 3 false

// Accept variable number of arguments
int Sum(int ... nums) {
  int sum = 0;
  for (int i : nums)
    sum += i;
  return sum;
}

int total = Sum(4, 3, 2, 1);   // returns 10

// Return single value
int Add(int x, int y) {
   return x + y;
}

int sum = Add(2, 3);

// Return no value
void PrintSum(int x, int y) {
   Console.WriteLine(x + y);
}

PrintSum(2, 3); 

// Pass by value (default), in/out-reference (ref), and out-reference (out)
void TestFunc(int x, ref int y, out int z, Point p1, ref Point p2) {
   x++;  y++;  z = 5;
   p1.x++;       // Modifying property of the object     
   p1 = null;    // Remove local reference to object
   p2 = null;   // Free the object
}

class Point {
   public int x, y;
}

Point p1 = new Point();
Point p2 = new Point();
p1.x = 2;
int a = 1, b = 1, c;   // Output param doesn't need initializing
TestFunc(a, ref b, out c, p1, ref p2);
Console.WriteLine("{0} {1} {2} {3} {4}",
   a, b, c, p1.x, p2 == null);   // 1 2 5 3 True

// Accept variable number of arguments
int Sum(params int[] nums) {
  int sum = 0;
  foreach (int i in nums)
    sum += i;
  return sum;
}

int total = Sum(4, 3, 2, 1);   // returns 10

Java Strings C#

// String concatenation
String school = "Harding ";
school = school + "University";   // school is "Harding University"

// String comparison
String mascot = "Bisons";
if (mascot == "Bisons")    // Not the correct way to do string comparisons
if (mascot.equals("Bisons"))   // true
if (mascot.equalsIgnoreCase("BISONS"))   // true
if (mascot.compareTo("Bisons") == 0)   // true

System.out.println(mascot.substring(2, 5));   // Prints "son"

// My birthday: Oct 12, 1973
java.util.Calendar c = new java.util.GregorianCalendar(1973, 10, 12);
String s = String.format("My birthday: %1$tb %1$te, %1$tY", c);

// Mutable string
StringBuffer buffer = new StringBuffer("two ");
buffer.append("three ");
buffer.insert(0, "one ");
buffer.replace(4, 7, "TWO");
System.out.println(buffer);     // Prints "one TWO three"

// String concatenation
string school = "Harding ";
school = school + "University";   // school is "Harding University"

// String comparison
string mascot = "Bisons";
if (mascot == "Bisons")    // true
if (mascot.Equals("Bisons"))   // true
if (mascot.ToUpper().Equals("BISONS"))   // true
if (mascot.CompareTo("Bisons") == 0)    // true

Console.WriteLine(mascot.Substring(2, 3));    // Prints "son"

// My birthday: Oct 12, 1973
DateTime dt = new DateTime(1973, 10, 12);
string s = "My birthday: " + dt.ToString("MMM dd, yyyy");

// Mutable string
System.Text.StringBuilder buffer = new System.Text.StringBuilder("two ");
buffer.Append("three ");
buffer.Insert(0, "one ");
buffer.Replace("two", "TWO");
Console.WriteLine(buffer);     // Prints "one TWO three"

Java Exception Handling C#

// Must be in a method that is declared to throw this exception
Exception ex = new Exception("Something is really wrong.");
throw ex;  

try {
  y = 0;
  x = 10 / y;
} catch (Exception ex) {
  System.out.println(ex.getMessage()); 
} finally {
  // Code that always gets executed
}

Exception up = new Exception("Something is really wrong.");
throw up;  // ha ha


try {
  y = 0;
  x = 10 / y;
} catch (Exception ex) {      // Variable "ex" is optional
  Console.WriteLine(ex.Message);
} finally {
  // Code that always gets executed
}

Java Namespaces C#

package harding.compsci.graphics;












import harding.compsci.graphics.Rectangle;  // Import single class

import harding.compsci.graphics.*;   // Import all classes

namespace Harding.Compsci.Graphics {
  ...
}

or

namespace Harding {
  namespace Compsci {
    namespace Graphics {
      ...
    }
  }
}

// Import all class. Can't import single class.
using Harding.Compsci.Graphics;

Java Classes / Interfaces C#

Accessibility keywords
public
private
protected
static

 

// Inheritance
class FootballGame extends Competition {
  ...
}

// Interface definition
interface IAlarmClock {
  ...
}

// Extending an interface 
interface IAlarmClock extends IClock {
  ...
}

// Interface implementation
class WristWatch implements IAlarmClock, ITimer {
   ...
}

Accessibility keywords
public
private
internal
protected
protected internal
static

// Inheritance
class FootballGame : Competition {
  ...
}

// Interface definition
interface IAlarmClock {
  ...
}

// Extending an interface 
interface IAlarmClock : IClock {
  ...
}

// Interface implementation
class WristWatch : IAlarmClock, ITimer {
   ...
}

Java Constructors / Destructors C#

class SuperHero {
  private int mPowerLevel;

  public SuperHero() {
    mPowerLevel = 0;
  }

  public SuperHero(int powerLevel) {
    this.mPowerLevel= powerLevel;
  }

  // No destructors, just override the finalize method
  protected void finalize() throws Throwable { 
    super.finalize();   // Always call parent's finalizer  
  }
}

class SuperHero {
  private int mPowerLevel;

  public SuperHero() {
     mPowerLevel = 0;
  }

  public SuperHero(int powerLevel) {
    this.mPowerLevel= powerLevel; 
  }

  ~SuperHero() {
    // Destructor code to free unmanaged resources.
    // Implicitly creates a Finalize method.

  }
}

Java Objects C#

SuperHero hero = new SuperHero();

hero.setName("SpamMan");
hero.setPowerLevel(3);

hero.Defend("Laura Jones");
SuperHero.Rest();  // Calling static method

SuperHero hero2 = hero;   // Both refer to same object
hero2.setName("WormWoman");
System.out.println(hero.getName());  // Prints WormWoman

hero = null;   // Free the object

if (hero == null)
  hero = new SuperHero();

Object obj = new SuperHero();
System.out.println("object's type: " + obj.getClass().toString());
if (obj instanceof SuperHero)
  System.out.println("Is a SuperHero object.");

SuperHero hero = new SuperHero();

hero.Name = "SpamMan";
hero.PowerLevel = 3;

hero.Defend("Laura Jones");
SuperHero.Rest();   // Calling static method

SuperHero hero2 = hero;   // Both refer to same object
hero2.Name = "WormWoman";
Console.WriteLine(hero.Name);   // Prints WormWoman

hero = null ;   // Free the object

if (hero == null)
  hero = new SuperHero();

Object obj = new SuperHero(); 
Console.WriteLine("object's type: " + obj.GetType().ToString());
if (obj is SuperHero)
  Console.WriteLine("Is a SuperHero object.");

Java Properties C#

private int mSize;

public int getSize() { return mSize; }
public void setSize(int value) {
  if (value < 0)
    mSize = 0;
  else
    mSize = value;
}


int s = shoe.getSize();
shoe.setSize(s+1);

private int mSize;

public int Size {
  get { return mSize; }
  set {
    if (value < 0)
      mSize = 0;
    else
      mSize = value;
  }
}

shoe.Size++;

Java Structs C#
 

 

No structs in Java.

struct StudentRecord {
  public string name;
  public float gpa;

  public StudentRecord(string name, float gpa) {
    this.name = name;
    this.gpa = gpa;
  }
}

StudentRecord stu = new StudentRecord("Bob", 3.5f);
StudentRecord stu2 = stu;  

stu2.name = "Sue";
Console.WriteLine(stu.name);    // Prints "Bob"
Console.WriteLine(stu2.name);   // Prints "Sue"
Java Console I/O C#
java.io.DataInput in = new java.io.DataInputStream(System.in);
System.out.print("What is your name? ");
String name = in.readLine();
System.out.print("How old are you? ");
int age = Integer.parseInt(in.readLine());
System.out.println(name + " is " + age + " years old.");


int c = System.in.read();   // Read single char
System.out.println(c);      // Prints 65 if user enters "A"

// The studio costs $499.00 for 3 months.
System.out.printf("The %s costs $%.2f for %d months.%n", "studio", 499.0, 3);

// Today is 06/25/04
System.out.printf("Today is %tD\n", new java.util.Date());

Console.Write("What's your name? ");
string name = Console.ReadLine();
Console.Write("How old are you? ");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("{0} is {1} years old.", name, age);
// or
Console.WriteLine(name + " is " + age + " years old.");

int c = Console.Read();  // Read single char
Console.WriteLine(c);    // Prints 65 if user enters "A"

// The studio costs $499.00 for 3 months.
Console.WriteLine("The {0} costs {1:C} for {2} months.\n", "studio", 499.0, 3);

// Today is 06/25/2004
Console.WriteLine("Today is " + DateTime.Now.ToShortDateString());

Java File I/O C#

import java.io.*;

// Character stream writing
FileWriter writer = new FileWriter("c:\\myfile.txt");
writer.write("Out to file.\n");
writer.close();

// Character stream reading
FileReader reader = new FileReader("c:\\myfile.txt");
BufferedReader br = new BufferedReader(reader);
String line = br.readLine();
while (line != null) {
  System.out.println(line);
  line = br.readLine();
}
reader.close();

// Binary stream writing
FileOutputStream out = new FileOutputStream("c:\\myfile.dat");
out.write("Text data".getBytes());
out.write(123);
out.close();

// Binary stream reading
FileInputStream in = new FileInputStream("c:\\myfile.dat");
byte buff[] = new byte[9];
in.read(buff, 0, 9);   // Read first 9 bytes into buff
String s = new String(buff);
int num = in.read();   // Next is 123
in.close();

using System.IO;

// Character stream writing
StreamWriter writer = File.CreateText("c:\\myfile.txt");
writer.WriteLine("Out to file.");
writer.Close();

// Character stream reading
StreamReader reader = File.OpenText("c:\\myfile.txt");
string line = reader.ReadLine();
while (line != null) {
  Console.WriteLine(line);
  line = reader.ReadLine();
}
reader.Close();


// Binary stream writing
BinaryWriter out = new BinaryWriter(File.OpenWrite("c:\\myfile.dat"));
out.Write("Text data");
out.Write(123);
out.Close();

// Binary stream reading
BinaryReader in = new BinaryReader(File.OpenRead("c:\\myfile.dat"));
string s = in.ReadString();
int num = in.ReadInt32();
in.Close();

 

C#'ın Java'yla Ortak Özellikleri

C#'ın Java'yla ortak özellikleri saymakla bitmez. Burada sadece bir kaç anahtar özellik verilecektir. Özellikle C#'ın Java'yla benzer olup C++'la hiç de benzer olmayan özeliklerini dikkat edilmesi gerekir.

  • İkisi de bir Intermediate Language'e (Ara Dil'e) derlenip öyle çalıştırılıyor
  • İki dil de temelden Multi-Threaded, nesneler senkronize edilebiliyor.
  • İkisinde de global fonksiyon veya sabit yok.
  • İkisinde de Single Inheritance (Tekli Kalıtım) var.
  • Dizi ve string'lere erişimde sınır kontrolü var
  • İkisinde de Garbage Collection (Çöp Toplama) var.
  • 43 Operatörden 41'i aynı.
  • 50 Java keywordü'nden 38'i aynen C#'ta var, 8 tanesi de aynı anlama gelen farklı sözcükle belirtilmiş.
 

C#'la Java'nın Küçük Farkları

 

C#'la Java arasında sadece bazı kolaylıklar sağlayan, temel mantıkta değişiklik getirmeyen bir çok özellik var. Bir kaç örnek vermek gerekirse :
►C#'ta primitive tipler nesne olarak kullanılabiliyor. (Bu Java'ya 1.5'de ekleniyor.) Cast etmekten ve her tip için method yazmaktan kurtarıyor.
►Daha kolay iterasyon için foreach yapısı (Buna benzer bir yapı Java'ya 1.5'te geliyor.)
►Try-catch bloğunda catch'in boş olması veya hiç olmaması.
►C#'ta exception yakalamak veya deklare etmek zorunlu değil.
►C#'ta Property şeklinde bir yapı var. Nesnenin property'lerine get/set yazmadan erişilebiliyor.
►C#'ta operator overloding var. Java'ya kafa karıştırıcı olduğu gekekçesiyle konmamış bu özellik.
►C#'ta funksiyon pointer'ı yerine kullanılan delegate var. Bir funksiyona başka bir fonksiyon parametre olarak aktarılabiliyor.
►Event'leri desteklemek için 'event' diye bir keyword var.
►C#'ta C++'taki enum'lar var. (1.5'de Java'ya tip güvenliği olan enum'lar gelecek.)
►C#'ta bir çok kişinin lanetlediği 'goto' var. Ama daha sınırlı bir kullanıma sahip. Java'da 'continue : label' şeklindeki yapının biraz daha seçenek tanıyan hali.
►C#'ta hem Java'daki 'jagged' (değiken boyutlu dizilerle oluşmuş diziler) var hem de C++'daki rectangular array'lar var.

 

C#'la Java'nın Önemli Farkları

►C++'taki struct'lar C#'ta var. Referans yerine değer tipi olarak tanımlanıyor.
►Method'lara parameter aktarımı ref, out gibi özelliklerle belirtilebiliyor.
►C#'ta attribute'ler, yani derleyiciler için direktifler var. Java'da sadece @depracated attributesi derleme sonrasında kullanılıyor. Diğer attributeler sadece yorum olarak işe yarıyor.
►C#'ta pointer var. Eğer 'unsafe' diye bir anahtar sözcük kullanılırsa hafıza erişilebilir hale geliyor.
 

.NET'le Java Platformu Arasındaki Farklar

 

C#'la Java arasındaki farklardan başka, .NET'le Java Platform'u arasında önemli bazı farklar var.
►Java'nın aradili yorumlanıyor. JIT sistemiyle birlikte sadce bazı kodlar performanstan kazanmak için yerli koda çevriliyor. C#'ın (.NET'in) ara dili önce derlenip öyle çalıştırılıyor. Bu yüzden daha hızlı çalıştığı söyleniyor.
►C# Microsofotun COM teknolojisiyle tam entegre çalışıyor. Java, COM teknolojisiyle doğrudan entegre olmuyor.
►C#, .NET, bir çok dilden biri. Java ise tek platform ve tek dil.


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

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.
 

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.
 

Generic tipler Java ve C# dillerinde mevcut. Ancak Java’da, generic tipler primitive tiplerle kullanılamazken, C# ile kullanılabiliyor. C# da goto komutu varken, Java’da yoktur. C# bazı kısıtlamalar dahilinde operator overloading işlemine izin verirken Java, izin vermez.
 

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.


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.
 

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.
 

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. C# da Java’da bulunan checked exception sistemi yoktur. C# sadece, çalışma zamanında yönetilen unchecked exception sistemini destekler. 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. 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.
 

 C# da, C/C++ da bulunan struct yapısı mevcut ve veri tipi olarak kullanılırken Java’da bu yapı bulunmuyor. C# Exception tanımlamak ve yakalamak gibi bir zorunluluk yok. Java, ortaya çıkış felsefesi gereği (robust application) buna izin vermez.

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. 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. C# da ref ve out  gibi anahtar sözcükler ile methodlara parametre geçirilebiliyor. Java’da böyle bir yapı yok.

 

Sonuç Olarak


 

Birini bilen bir diğerinide kısa zamanda öğrenebilir.


 
Osman Kemal Dağ Osman Kemal Dağ Yazar Hakkında Tüm yazıları Mesaj gönder Yazdır



Aktif etkinlik bulunmamaktadır.
ANKET
Endüstri 4.0 için En Hazır Sektör Hangisidir

Sonuçlar