C# Programlamaya Giriş
C#, Microsoft tarafından geliştirilen, modern, nesne yönelimli ve tip güvenli bir programlama dilidir. .NET platformu üzerinde çalışır ve oyun geliştirmeden (Unity), web uygulamalarına kadar geniş bir alanda kullanılır.
Neden C#?
- Güçlü ve Modern: Sürekli güncellenen zengin özellikler
- Geniş Kullanım Alanı: Web, Masaüstü, Mobil, Oyun, AI
- Tip Güvenliği: Derleme zamanında hata yakalama
- .NET Ekosistemi: Zengin kütüphane desteği
using System;
namespace IlkProgram
{
class Program
{
static void Main(string[] args)
{
// Ekrana yazdırma
Console.WriteLine("Merhaba Dünya!");
Console.WriteLine("FediaTech'e Hoşgeldiniz!");
// Kullanıcıdan veri alma
Console.Write("Adınız nedir🔹 ");
string isim = Console.ReadLine();
Console.WriteLine($"Hoşgeldin, {isim}!");
// Konsolun kapanmasını önle
Console.ReadKey();
}
}
}
Değişkenler ve Veri Tipleri
C# statik tipli bir dildir, yani değişkenlerin türünü önceden belirtmeniz gerekir.
Temel Veri Tipleri
| Tip | Açıklama | Örnek | Aralık |
|---|---|---|---|
int |
Tam sayı (32-bit) | 42 | -2.1 milyar ile +2.1 milyar |
long |
Tam sayı (64-bit) | 100000L | Çok büyük sayılar |
float |
Ondalık sayı | 3.14f | ±1.5 × 10^-45 ile ±3.4 × 10^38 |
double |
Ondalık sayı | 3.14159 | ±5.0 × 10^-324 ile ±1.7 × 10^308 |
decimal |
Parasal değerler | 19.99m | Yüksek hassasiyet |
bool |
Mantıksal | true | true veya false |
char |
Karakter | 'A' | Tek Unicode karakteri |
string |
Metin | "Merhaba" | Karakter dizisi |
// Değişken tanımlama
int yas = 25;
string ad = "Ahmet";
double maas = 15000.50;
bool ogrenciMi = true;
char notHarfi = 'A';
// Var anahtar kelimesi (Tip çıkarımı)
var sehir = "İstanbul"; // string olarak algılar
var yil = 2026; // int olarak algılar
// Sabitler (Değiştirilemez)
const double PI = 3.14159;
// PI = 3.15; // HATA!
// String interpolasyon
Console.WriteLine($"Personel: {ad}, Yaş: {yas}, Maaş: {maas}");
// Tip dönüşümleri
string sayiStr = "100";
int sayi = int.Parse(sayiStr);
int sayi2 = Convert.ToInt32(sayiStr);
// Güvenli dönüşüm
if (int.TryParse("123", out int sonuc))
{
Console.WriteLine($"Dönüştürülen sayı: {sonuc}");
}
Kontrol Yapıları
Program akışını yönlendirmek için if-else ve switch yapıları kullanılır.
int saat = 14;
// If-Else Yapısı
if (saat < 12)
{
Console.WriteLine("Günaydın!");
}
else if (saat < 18)
{
Console.WriteLine("İyi günler!");
}
else
{
Console.WriteLine("İyi akşamlar!");
}
// Ternary Operatörü
string mesaj = (saat < 12) 🔹 "Erken" : "Geç";
// Switch Yapısı (Modern C#)
int gun = 3;
string gunAdi = gun switch
{
1 => "Pazartesi",
2 => "Salı",
3 => "Çarşamba",
4 => "Perşembe",
5 => "Cuma",
6 => "Cumartesi",
7 => "Pazar",
_ => "Geçersiz"
};
Console.WriteLine($"Bugün: {gunAdi}");
Döngüler
İşlemleri tekrar etmek için For, While, Do-While ve Foreach döngüleri kullanılır.
// For Döngüsü
Console.WriteLine("--- 0'dan 4'e ---");
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
// While Döngüsü
Console.WriteLine("--- Geri Sayım ---");
int sayac = 3;
while (sayac > 0)
{
Console.WriteLine(sayac);
sayac--;
}
// Foreach (Koleksiyonlar için)
string[] sehirler = { "Ankara", "İstanbul", "İzmir" };
Console.WriteLine("--- Şehirler ---");
foreach (string sehir in sehirler)
{
Console.WriteLine(sehir);
}
Metotlar (Fonksiyonlar)
Kod tekrarını önlemek ve modülerlik için metotlar kullanılır.
class Hesaplayici
{
// Geriye değer döndürmeyen metot (void)
public void Selamla()
{
Console.WriteLine("Merhaba!");
}
// Parametre alan ve değer döndüren metot
public int Topla(int a, int b)
{
return a + b;
}
// Opsiyonel parametre
public void BilgiYaz(string mesaj, int tekrar = 1)
{
for (int i = 0; i < tekrar; i++)
{
Console.WriteLine(mesaj);
}
}
// Metot aşırı yükleme (Overloading)
public int Carp(int a, int b) => a * b;
public double Carp(double a, double b) => a * b;
}
// Kullanım
var hesap = new Hesaplayici();
hesap.Selamla();
int toplam = hesap.Topla(10, 20);
hesap.BilgiYaz("Önemli!", 3);
Sınıflar ve Nesneler (OOP)
C#, nesne yönelimli bir dildir (OOP). Her şey nesneler ve sınıflar etrafında modellenir.
// Sınıf Tanımlama
public class Araba
{
// Özellikler (Properties)
public string Marka { get; set; }
public string Model { get; set; }
public int Yil { get; set; }
// Private alan (Encapsulation)
private int _hiz;
// Kurucu Metot (Constructor)
public Araba(string marka, string model, int yil)
{
Marka = marka;
Model = model;
Yil = yil;
_hiz = 0;
}
// Metot
public void Hizlan(int artis)
{
_hiz += artis;
Console.WriteLine($"{Marka} hızlandı. Şu anki hız: {_hiz} km/s");
}
}
// Kullanım
Araba arabam = new Araba("Tesla", "Model Y", 2024);
Console.WriteLine($"Aracım: {arabam.Marka} {arabam.Model}");
arabam.Hizlan(50);
Kalıtım (Inheritance)
Bir sınıfın özelliklerini başka bir sınıfa aktarmak için kullanılır.
// Ana Sınıf (Base Class)
public class Hayvan
{
public string Ad { get; set; }
public virtual void SesCikar()
{
Console.WriteLine("Ses çıkarıyor...");
}
}
// Türetilmiş Sınıf (Derived Class)
public class Kedi : Hayvan
{
public override void SesCikar()
{
Console.WriteLine("Miyav!");
}
public void Mirildan()
{
Console.WriteLine("Mırrr...");
}
}
public class Kopek : Hayvan
{
public override void SesCikar()
{
Console.WriteLine("Hav hav!");
}
}
// Kullanım
Hayvan kedi = new Kedi { Ad = "Pamuk" };
Hayvan kopek = new Kopek { Ad = "Karabaş" };
kedi.SesCikar(); // Miyav!
kopek.SesCikar(); // Hav hav!
Koleksiyonlar (Lists & Arrays)
Veri gruplarını yönetmek için diziler ve listeler kullanılır. List<T> en popüler
yapıdır.
using System.Collections.Generic;
// List Tanımlama
List<string> isimler = new List<string>();
// Ekleme
isimler.Add("Ali");
isimler.Add("Veli");
isimler.AddRange(new string[] { "Ayşe", "Fatma" });
// Silme
isimler.Remove("Veli");
// Erişim
Console.WriteLine($"İlk kişi: {isimler[0]}");
Console.WriteLine($"Kişi sayısı: {isimler.Count}");
// Sıralama
isimler.Sort();
// Döngü
foreach (var isim in isimler)
{
Console.WriteLine(isim);
}
// Dictionary (Anahtar-Değer)
Dictionary<int, string> plakalar = new Dictionary<int, string>();
plakalar.Add(34, "İstanbul");
plakalar.Add(06, "Ankara");
Console.WriteLine(plakalar[34]); // İstanbul
Hata Yönetimi (Try-Catch)
Çalışma zamanı hatalarını kontrollü bir şekilde yönetmek için kullanılır.
try
{
Console.Write("Bir sayı girin: ");
int sayi = int.Parse(Console.ReadLine());
int sonuc = 100 / sayi;
Console.WriteLine($"Sonuç: {sonuc}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Hata: Sıfıra bölme yapılamaz!");
}
catch (FormatException)
{
Console.WriteLine("Hata: Lütfen geçerli bir sayı girin.");
}
catch (Exception ex)
{
Console.WriteLine($"Beklenmeyen bir hata: {ex.Message}");
}
finally
{
Console.WriteLine("İşlem tamamlandı."); // Her durumda çalışır
}
Dosya İşlemleri
Dosyadan okuma ve yazma işlemleri için System.IO kütüphanesi kullanılır.
using System.IO;
string dosyaYolu = "notlar.txt";
// Dosya Yazma
string[] satirlar = { "Satır 1", "Satır 2", "Satır 3" };
File.WriteAllLines(dosyaYolu, satirlar);
// Metin Ekleme (Append)
File.AppendAllText(dosyaYolu, "\nEk satır");
// Dosya Okuma
if (File.Exists(dosyaYolu))
{
string metin = File.ReadAllText(dosyaYolu);
Console.WriteLine("Dosya İçeriği:");
Console.WriteLine(metin);
}
else
{
Console.WriteLine("Dosya bulunamadı.");
}
// Klasör İşlemleri
Directory.CreateDirectory("Yedekler");