Uzman bir Java Developer için yarım saatte C# anlatır mısın?




Elbette, bir Java geliştiricisinin yarım saatte C# öğrenmesi için ana konulara odaklanacağım. C# ve Java birçok benzerliğe sahip oldukları için, bu süre içinde temel farklara ve C# özelindeki önemli özelliklere odaklanacağım. Hazırsanız başlayalım.


1. Genel Bakış

Dil Yapısı: C# ve Java, her ikisi de C-tabanlı diller olduğu için, sözdizimi açısından birbirlerine oldukça benzer. İf, for, while gibi yapılar hemen hemen aynıdır.

Nesne Yönelimli Programlama (OOP): Her iki dil de sınıf tabanlı ve nesne yönelimli. Ancak C#’da yapılar (structs) ve kayıt tipleri (record types) gibi Java’da olmayan bazı özellikler bulunur.

Hafıza Yönetimi: Java'da olduğu gibi C#'da da otomatik çöp toplama (garbage collection) mevcuttur.

2. Platform Bağımsızlık

Java: Java, "write once, run anywhere" (bir kere yaz, her yerde çalıştır) ilkesiyle platform bağımsızlığını sağlar.

C#: C# başlangıçta Microsoft'un .NET çerçevesi için geliştirilmişti ve daha çok Windows ile ilişkilendiriliyor. Ancak, .NET Core ile birlikte artık Linux ve macOS üzerinde de çalışabilmekte.

3. Gelişmiş Özellikler

LINQ: Language Integrated Query, C#’da veri sorgulama için güçlü ve esnek bir yol sunar. Java’da bu tür bir dil içi sorgulama yoktur.

Delegeler ve Olaylar: C#’da, delegeler fonksiyonları temsil eder ve olaylar (events) için kullanılır. Java'da bu işlevsellikler genellikle arayüzler (interfaces) ile sağlanır.

Yapılar (Structs): C#, değer türlerini tanımlamak için yapılar sunar. Java’da buna benzer bir yapı yoktur; her şey nesnedir.

4. Sözdizimi Farklılıkları

Özellikler (Properties): C# özellikleri, alanlara (fields) erişimi kolaylaştırır ve get/set metodlarına alternatif sunar. Java’da bunun için genellikle manuel get ve set metodları yazılır.

Indexerler: C#’da, dizi benzeri sınıflar için indexer tanımlamak mümkündür. Java’da bu tür bir yapı yoktur; metodlar kullanılır.

5. Geliştirme Ortamı ve Araçlar

Visual Studio: C# geliştiricileri genellikle Microsoft’un Visual Studio IDE’sini kullanırlar. Bu, zengin özellikler sunar ve .NET ile entegre çalışır.

Cross-Platform Geliştirme: .NET Core ve Visual Studio Code sayesinde, C# artık Windows dışındaki platformlarda da etkili bir şekilde kullanılabilmektedir.

Devamı için Öneriler

Asenkron Programlama: C#'da async ve await anahtar kelimeleri ile asenkron programlama yapılır. Java’da ise bu, CompletableFuture ve benzeri araçlarla sağlanır.

Yansıma (Reflection): C# ve Java her ikisinde de yansıma (reflection) mevcuttur, ancak kullanım detayları farklılık gösterir.

Genel Kullanım Farklılıkları: Döngüler, koşul ifadeleri, hata yakalama gibi temel programlama yapıları benzer olsa da, dilin kendine has özelliklerini öğrenmek önemlidir.

Bu bilgiler, Java'dan C#'a geçiş yaparken size bir başlangıç noktası sağlay


Kod örnekleriyle devam et ve Java ile karşılaştır


Tabii, C#'da bazı temel konseptlerin ve özelliklerin kod örnekleriyle Java ile karşılaştırılmasını yaparak devam edelim.


1. Sınıflar ve Metotlar

Java:


java

Copy code

public class HelloWorld {

    public static void main(String[] args) {

        System.out.println("Hello, Java!");

    }

}


C#:


csharp

Copy code

using System;


public class HelloWorld {

    public static void Main() {

        Console.WriteLine("Hello, C#!");

    }

}

Java ve C# sınıf yapısı ve metod tanımları oldukça benzerdir. Her iki dilde de public static void main metodu uygulama giriş noktasıdır.


2. Özellikler (Properties)

Java:


java

Copy code

public class Person {

    private String name;


    public String getName() {

        return name;

    }


    public void setName(String name) {

        this.name = name;

    }

}

C#:


csharp

Copy code

public class Person {

    public string Name { get; set; }

}

C#'da özellikler (properties), alanlara (fields) yönelik daha temiz ve okunabilir bir sözdizimi sağlar. Java'da aynı işlevsellik, getter ve setter metotları ile elde edilir.


3. Delegeler ve Olaylar

Java:


java

Copy code

interface MessageListener {

    void onMessageReceived(String message);

}


public class MessageProcessor {

    private MessageListener listener;


    public void setListener(MessageListener listener) {

        this.listener = listener;

    }


    public void process(String message) {

        if (listener != null) {

            listener.onMessageReceived(message);

        }

    }

}

C#:


csharp

Copy code

public delegate void MessageReceivedHandler(string message);


public class MessageProcessor {

    public event MessageReceivedHandler MessageReceived;


    public void Process(string message) {

        MessageReceived?.Invoke(message);

    }

}

C#'da delegeler ve olaylar (events), olay tabanlı programlamada kullanılır. Java'da bu genellikle arayüzler (interfaces) ile yapılır.


4. Asenkron Programlama

Java:


java

Copy code

public CompletableFuture<String> getDataAsync() {

    return CompletableFuture.supplyAsync(() -> "Data from async operation");

}


// Kullanım

CompletableFuture<String> future = getDataAsync();

future.thenAccept(System.out::println);

C#:


csharp

Copy code

public async Task<string> GetDataAsync() {

    return await Task.Run(() => "Data from async operation");

}


// Kullanım

string data = await GetDataAsync();

Console.WriteLine(data);

C# ve Java her ikisi de modern asenkron programlama modellerini destekler. C#'da async ve await anahtar kelimeleri, Java'da ise CompletableFuture kullanılır.


5. LINQ ve Stream API

Java (Stream API):


java

Copy code

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

List<String> filtered = names.stream()

                             .filter(name -> name.startsWith("A"))

                             .collect(Collectors.toList());

C# (LINQ):


csharp

Copy code

using System.Linq;


List<string> names = new List<string> { "Alice", "Bob", "Charlie" };

List<string> filtered = names.Where(name => name.StartsWith("A")).ToList();

C#'daki LINQ ve Java'daki Stream API, koleksiyonlar üzerinde sorgu yazmayı ve işlemler yapmayı kolaylaştırır. Her iki dilde de benzer işlevsellikler bulunur, ancak sözdizimleri farklıdır.


Bu örnekler, Java'dan C#'a geçiş yaparken temel yapıları ve dil özelliklerini anlamanıza yardımcı olacaktır. Her iki dilin de kendi içinde zengin özelliklere ve kütüphanelere sahip olduğunu unutmayın. Bu yüzden, pratik yaparak ve dökümantasyonları inceleyerek öğrenme sürecinizi derinleştirebilirsiniz.

C#'ı temel düzeyde ve basit kod örnekleriyle anlatmaya çalışacağım. Kodlamaya yeni başlayan veya programlama konusunda az bilgisi olan biri için bile anlaşılabilir olması için adım adım ilerleyeceğim.


1. Temel Yapı

C# programları genellikle bir veya birden fazla "class" (sınıf) içerir. Bir sınıf, kodun organize edildiği bir yapıdır. En temel C# programı aşağıdaki gibidir:


csharp

Copy code

using System;


class Program

{

    static void Main()

    {

        Console.WriteLine("Merhaba Dünya!");

    }

}

using System;: Bu satır, C# programının, sistemle ilgili işlevleri kullanabilmesi için gerekli olan kodları içe aktarır.

class Program: Bu, "Program" adında bir sınıf tanımlar.

static void Main(): Her C# programının başlangıç noktasıdır. Program çalıştırıldığında, Main metodu otomatik olarak çağrılır.

Console.WriteLine("Merhaba Dünya!");: Ekran üzerine "Merhaba Dünya!" yazdırır.

2. Değişkenler ve Veri Tipleri

Değişkenler, verileri saklamak için kullanılır. Her değişkenin bir veri tipi vardır.


csharp

Copy code

int sayi = 10;

string metin = "Merhaba";

bool dogruMu = true;

int sayi = 10;: "sayi" adında bir tam sayı değişkeni oluşturur ve ona 10 değerini atar.

string metin = "Merhaba";: "metin" adında bir metin (string) değişkeni oluşturur ve ona "Merhaba" değerini atar.

bool dogruMu = true;: "dogruMu" adında bir boolean (doğru/yanlış) değişkeni oluşturur ve ona "true" (doğru) değerini atar.

3. Koşullu İfadeler

Koşullu ifadeler, belirli koşullara göre farklı kod bloklarının çalıştırılmasını sağlar.


csharp

Copy code

int sayi = 10;


if (sayi > 5)

{

    Console.WriteLine("Sayı 5'ten büyük.");

}

else

{

    Console.WriteLine("Sayı 5'ten küçük veya eşit.");

}

Bu kodda, sayi değişkeninin değeri 5'ten büyükse bir mesaj yazdırılır, değilse başka bir mesaj yazdırılır.


4. Döngüler

Döngüler, belirli bir kod blokunu tekrar tekrar çalıştırmak için kullanılır.


csharp

Copy code

for (int i = 0; i < 5; i++)

{

    Console.WriteLine("Döngü: " + i);

}

Bu kod, 0'dan başlayarak 4'e kadar olan sayıları yazdırır. Her adımda "i" değişkeni 1 arttırılır ve 5 olduğunda döngü sona erer.


5. Fonksiyonlar

Fonksiyonlar, belirli bir işlevi gerçekleştiren kod bloklarıdır. Fonksiyonlar tekrar kullanılabilir ve organize kod yazmayı sağlar.


csharp

Copy code

static int Topla(int sayi1, int sayi2)

{

    return sayi1 + sayi2;

}


static void Main()

{

    int sonuc = Topla(5, 3);

    Console.WriteLine("Toplam: " + sonuc);

}

Bu örnekte, Topla adında bir fonksiyon tanımlanmış ve iki sayıyı toplayıp sonucu döndürmektedir. Main metodunda bu fonksiyon çağrılır ve sonucu ekrana yazdırılır.



Tabii, C#'ın temel yapı taşlarını anlamaya devam edelim.


6. Diziler

Diziler, aynı türdeki birden fazla değeri bir arada tutmanızı sağlar.


csharp

Copy code

int[] sayilar = new int[3];

sayilar[0] = 1;

sayilar[1] = 2;

sayilar[2] = 3;


// Dizi elemanlarını yazdırmak için döngü kullanabiliriz.

for (int i = 0; i < sayilar.Length; i++)

{

    Console.WriteLine(sayilar[i]);

}

Bu kod, 3 elemanlı bir tam sayı dizisi oluşturur, değerleri atar ve sonra bu değerleri yazdırır.


7. Listeler

Listeler, boyutları dinamik olarak değişebilen koleksiyonlardır.


csharp

Copy code

using System.Collections.Generic;


List<string> isimler = new List<string>();

isimler.Add("Ali");

isimler.Add("Ayşe");

isimler.Add("Ahmet");


foreach (var isim in isimler)

{

    Console.WriteLine(isim);

}

Bu kod, string türünden bir liste oluşturur, bazı isimler ekler ve sonra bu isimleri yazdırır.


8. Sözlükler

Sözlükler, anahtar-değer çiftleri şeklinde veri saklamak için kullanılır.


csharp

Copy code

using System.Collections.Generic;


Dictionary<string, int> telefonDefteri = new Dictionary<string, int>();

telefonDefteri.Add("Ahmet", 12345);

telefonDefteri.Add("Ayşe", 67890);


if (telefonDefteri.ContainsKey("Ahmet"))

{

    Console.WriteLine("Ahmet'in telefon numarası: " + telefonDefteri["Ahmet"]);

}

Bu kod, isimler ve telefon numaralarını saklayan bir sözlük oluşturur ve ardından bir ismin telefon numarasını sorgular.


9. Hata Yakalama

Programlarınızda oluşabilecek hataları yakalamak için try-catch bloklarını kullanabilirsiniz.


csharp

Copy code

try

{

    int bolen = 0;

    int sonuc = 10 / bolen;

    Console.WriteLine(sonuc);

}

catch (DivideByZeroException)

{

    Console.WriteLine("Bir sayı sıfıra bölünemez!");

}

Bu kod, sıfıra bölme hatasını yakalar ve bir hata mesajı yazdırır.


10. Sınıf ve Nesneler

Sınıflar, nesne yönelimli programlamanın temel yapı taşlarıdır. Sınıflar, veri ve fonksiyonları bir arada tutar.


csharp

Copy code

class Kisi

{

    public string Ad;

    public int Yas;


    public void SelamVer()

    {

        Console.WriteLine("Merhaba, ben " + Ad + ", yaşım " + Yas);

    }

}


static void Main()

{

    Kisi kisi1 = new Kisi();

    kisi1.Ad = "Ali";

    kisi1.Yas = 30;


    kisi1.SelamVer();

}

Bu kod, Kisi adında bir sınıf tanımlar ve bu sınıfı kullanarak bir nesne oluşturur. Daha sonra bu nesne üzerinden fonksiyon çağrılır.


Bu örnekler, C#'ın temel yapı taşları hakkında temel bir anlayış sağlamak içindir. Her bir konsept, daha detaylı incelenebilir ve karmaşık programlar oluşturmak için kullanılabilir. Başlangıç için bu temel bilgiler, C# programlamaya giriş yapmak için yeterlidir.


Elbette, C#'ın temel yapı taşlarını daha da derinlemesine inceleyelim.


11. Yapıcı Metotlar (Constructor)

Yapıcı metotlar, bir sınıfın nesnesi oluşturulduğunda otomatik olarak çağrılır. Nesne başlangıç değerleri ayarlamak için kullanılır.


csharp

Copy code

class Kisi

{

    public string Ad;

    public int Yas;


    public Kisi(string ad, int yas)

    {

        Ad = ad;

        Yas = yas;

    }


    public void SelamVer()

    {

        Console.WriteLine("Merhaba, ben " + Ad + ", yaşım " + Yas);

    }

}


static void Main()

{

    Kisi kisi1 = new Kisi("Ali", 30);

    kisi1.SelamVer();

}

Bu kodda Kisi sınıfı için bir yapıcı metot (constructor) tanımlanmıştır. Bu yapıcı, nesne oluşturulurken ad ve yaş değerlerini alır.


12. Kalıtım (Inheritance)

Kalıtım, bir sınıfın başka bir sınıfın özelliklerini ve metodlarını miras almasını sağlar.


csharp

Copy code

class Canli

{

    public void SolunumYap()

    {

        Console.WriteLine("Solunum yapılıyor...");

    }

}


class Insan : Canli

{

    public void Konus()

    {

        Console.WriteLine("Merhaba!");

    }

}


static void Main()

{

    Insan insan = new Insan();

    insan.SolunumYap(); // Miras alınan metot

    insan.Konus(); // Insan sınıfına ait metot

}

Bu örnekte, Insan sınıfı Canli sınıfından türetilmiştir ve Canli sınıfının metodlarını kullanabilir.


13. Arayüzler (Interfaces)

Arayüzler, sınıfların uygulaması gereken metodları tanımlar.


csharp

Copy code

interface IKonusabilir

{

    void Konus();

}


class Insan : IKonusabilir

{

    public void Konus()

    {

        Console.WriteLine("Merhaba!");

    }

}


static void Main()

{

    Insan insan = new Insan();

    insan.Konus();

}

Bu örnekte, Insan sınıfı IKonusabilir arayüzünü uygular ve Konus metodunu tanımlamak zorundadır.


14. Polimorfizm

Polimorfizm, aynı arayüzü farklı sınıflarda farklı şekillerde uygulama yeteneğidir.


csharp

Copy code

class Kedi : IKonusabilir

{

    public void Konus()

    {

        Console.WriteLine("Miyav!");

    }

}


static void Main()

{

    IKonusabilir kedi = new Kedi();

    kedi.Konus(); // "Miyav!"

}

Bu örnekte, Kedi sınıfı da IKonusabilir arayüzünü uygular, ancak Konus metodunu farklı bir şekilde gerçekleştirir.


15. Genel Kullanım (Generics)

Genel kullanım, türden bağımsız kod yazmayı sağlar.


csharp

Copy code

class Kutu<T>

{

    public T Icerik { get; set; }


    public void Yazdir()

    {

        Console.WriteLine("İçerik: " + Icerik);

    }

}


static void Main()

{

    Kutu<string> stringKutu = new Kutu<string>();

    stringKutu.Icerik = "Merhaba";

    stringKutu.Yazdir();

}

Bu örnekte, Kutu<T> sınıfı herhangi bir türde (T) veriyi tutabilir. Bu sayede aynı sınıf, farklı veri türleriyle kullanılabilir.


Bu kod parçaları, C# programlama dilinin temel kavramlarını ve yapılarını temsil eder. C#'ı öğrenirken bu kavramların üzerine inşa ederek daha karmaşık programlar geliştirebilirsiniz. Her yeni konsept, pratik yaparak ve örnekler üzerinden çalışarak daha i


C# programlama dilinin temel kavramlarını anlamaya devam edelim.


16. Özelikler (Properties)

Özellikler, bir sınıfın alanlarına (fields) güvenli erişim sağlar ve bu alanları yönetmek için get ve set metotlarını kullanır.


csharp

Copy code

class Kisi

{

    private string ad;


    public string Ad

    {

        get { return ad; }

        set { ad = value; }

    }

}


static void Main()

{

    Kisi kisi = new Kisi();

    kisi.Ad = "Ali";  // set metodu çalışır

    Console.WriteLine(kisi.Ad);  // get metodu çalışır

}

Bu örnekte, Kisi sınıfında Ad isminde bir özellik tanımlanmış ve bu özellik üzerinden ad alanına güvenli bir şekilde erişilmiş ve değer ataması yapılmıştır.


17. Statik Üyeler

Statik üyeler, sınıfın kendisine ait olup nesneler arasında paylaşılan üyelerdir.


csharp

Copy code

class Matematik

{

    public static int Topla(int a, int b)

    {

        return a + b;

    }

}


static void Main()

{

    int sonuc = Matematik.Topla(5, 10);  // Nesne oluşturmadan doğrudan sınıf üzerinden erişim

    Console.WriteLine(sonuc);

}

Bu örnekte, Topla metoduna Matematik sınıfının bir nesnesini oluşturmadan, sınıf adı üzerinden erişilir.


18. Enumlar (Enumerations)

Enumlar, sabit değerler kümesini adlandırılmış sabitlerle temsil eder.


csharp

Copy code

enum Gunler { Pazartesi, Sali, Carsamba, Persembe, Cuma, Cumartesi, Pazar }


static void Main()

{

    Gunler bugun = Gunler.Cuma;

    Console.WriteLine(bugun);  // Cuma

}

Bu örnekte, haftanın günleri bir enum olarak tanımlanmış ve bir enum değeri kullanılmıştır.


19. Exception (İstisna) Yönetimi

Hataları (exceptions) yakalamak ve işlemek için try-catch-finally blokları kullanılır.


csharp

Copy code

try

{

    int[] sayilar = new int[2];

    sayilar[10] = 99;  // Bu satır bir IndexOutOfRangeException hatası oluşturur

}

catch (IndexOutOfRangeException ex)

{

    Console.WriteLine("Bir hata oluştu: " + ex.Message);

}

finally

{

    Console.WriteLine("Bu blok her zaman çalışır.");

}

Bu kodda, bir dizi dışına çıkma hatası oluşturulur, yakalanır ve işlenir.


20. Namespaces (Ad Alanları)

Namespaces, kodu organize etmek için kullanılır ve çakışan sınıf adlarını önlemeye yardımcı olur.


csharp

Copy code

namespace Matematik

{

    class Hesap

    {

        public static int Topla(int a, int b)

        {

            return a + b;

        }

    }

}


static void Main()

{

    int sonuc = Matematik.Hesap.Topla(5, 7);

    Console.WriteLine(sonuc);

}

Bu örnekte, Hesap sınıfı Matematik ad alanı içinde tanımlanmıştır.


Bu temel özellikler ve yapılar, C# programlama dilinin ana hatlarını oluşturur. Her bir konsept, daha kapsamlı ve detaylı uygulamalar için bir temel teşkil eder. Öğrenme sürecinde bu yapıların üzerine kendi projeleriniz ve pratiklerinizle ekleyerek ilerleyebilirsiniz.


C# programlama dilindeki daha ileri düzey konseptlere ve özelliklere değinelim.


21. Event Handling (Olay İşleme)

C# event handling, bir olayın gerçekleştiğinde belirli kodların çalıştırılmasını sağlar. Bu, genellikle kullanıcı arayüzleri ve asenkron programlama için kullanılır.


csharp

Copy code

using System;


class Zil

{

    public event EventHandler ZilCalindi;


    public void Cal()

    {

        Console.WriteLine("Zil çalıyor...");

        OnZilCalindi();

    }


    protected virtual void OnZilCalindi()

    {

        ZilCalindi?.Invoke(this, EventArgs.Empty);

    }

}


class Okul

{

    static void Main()

    {

        Zil zil = new Zil();

        zil.ZilCalindi += Zil_CalindiEvent;


        zil.Cal();

    }


    private static void Zil_CalindiEvent(object sender, EventArgs e)

    {

        Console.WriteLine("Zil çalındı eventi işlendi.");

    }

}

Bu örnekte, Zil sınıfı bir olay (event) tanımlar ve bu olay Cal metodu çağrıldığında tetiklenir. Okul sınıfı, bu olaya bir işleyici (handler) atar.


22. Delege (Delegate)

Delegate'ler, metodlara referanslar olarak düşünülebilir. Bu, metotları değişkenler gibi geçirmenizi sağlar.


csharp

Copy code

delegate int Hesapla(int x, int y);


class Matematik

{

    public int Topla(int a, int b)

    {

        return a + b;

    }


    public int Cikar(int a, int b)

    {

        return a - b;

    }

}


static void Main()

{

    Matematik matematik = new Matematik();

    Hesapla toplaDelege = new Hesapla(matematik.Topla);

    Hesapla cikarDelege = new Hesapla(matematik.Cikar);


    int toplam = toplaDelege(10, 5);

    int fark = cikarDelege(10, 5);


    Console.WriteLine("Toplam: " + toplam);

    Console.WriteLine("Fark: " + fark);

}

Bu örnekte, Hesapla adında bir delegate tanımlanmış ve Matematik sınıfının Topla ve Cikar metodlarına referans olarak atanan delegate'ler kullanılmıştır.


23. Asenkron Programlama

Asenkron programlama, programın diğer işlemleri engellemeden, arka planda işlemleri sürdürmesini sağlar.


csharp

Copy code

using System;

using System.Threading.Tasks;


class Program

{

    static async Task Main(string[] args)

    {

        await UzunSurenIslem();

        Console.WriteLine("Asenkron işlem tamamlandı.");

    }


    static async Task UzunSurenIslem()

    {

        Console.WriteLine("Uzun süren işlem başladı...");

        await Task.Delay(2000);  // 2 saniye bekler

        Console.WriteLine("Uzun süren işlem bitti.");

    }

}

Bu kod, UzunSurenIslem metodunu asenkron olarak çalıştırır ve tamamlandığında bir mesaj yazdırır.


24. Extension Methods (Genişletme Metotları)

Extension metotlar, var olan bir tipe yeni metotlar eklemenizi sağlar.


csharp

Copy code

public static class StringExtensions

{

    public static int KelimeSayisi(this string str)

    {

        return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;

    }

}


static void Main()

{

    string metin = "Bu bir test cümlesidir.";

    int kelimeSayisi = metin.KelimeSayisi();


    Console.WriteLine("Kelime Sayısı: " + kelimeSayisi);

}

Bu örnekte, String türüne KelimeSayisi adında bir genişletme metodu eklenmiştir.

Please Select Embedded Mode To Show The Comment System.*

Daha yeni Daha eski

نموذج الاتصال