Uytar
Administrator
Yönetici
C#, nesne yönelimli programlama (OOP) prensiplerine dayalı güçlü bir programlama dilidir. Sınıflar ve nesneler, C#'ta nesne yönelimli programlamanın temel taşlarını oluşturur. Bu rehberde, C#'ta sınıf oluşturma, nesne kavramı ve bunların nasıl kullanıldığını detaylı bir şekilde ele alacağız. Ayrıca, sıkça sorulan sorular (FAQs) bölümüyle yaygın sorunlara çözümler sunacağız.
Bu örnekte:
Bu kodda:
Bu, Hiz alanına yalnızca pozitif değerler atanmasını sağlar.
Bu örnekte:
Sınıf (Class) Nedir?
C#'ta bir sınıf, bir nesnenin şablonunu veya planını tanımlar. Sınıflar, veri (alanlar) ve bu veriler üzerinde işlem yapan davranışları (metotlar) bir araya getirir. Bir sınıf, nesnelerin özelliklerini ve işlevlerini belirler, ancak kendisi bir veri taşımaz. Nesneler, bu sınıflardan türetilen örneklerdir.Sınıf Tanımlama
C#'ta bir sınıf, class anahtar kelimesi kullanılarak tanımlanır. Aşağıda temel bir sınıf örneği verilmiştir:
C#:
public class Araba
{
// Alanlar (Fields)
public string Marka;
public string Model;
public int Yil;
private double Hiz;
// Yapıcı Metot (Constructor)
public Araba(string marka, string model, int yil)
{
Marka = marka;
Model = model;
Yil = yil;
Hiz = 0; // Varsayılan hız
}
// Metotlar
public void Hizlan(double artis)
{
Hiz += artis;
Console.WriteLine($"{Marka} {Model} şimdi {Hiz} km/s hızda.");
}
public void Dur()
{
Hiz = 0;
Console.WriteLine($"{Marka} {Model} durdu.");
}
}
Bu örnekte:
- Araba sınıfı, bir arabanın özelliklerini (Marka, Model, Yil, Hiz) ve davranışlarını (Hizlan, Dur) tanımlar.
- public erişim belirteci, sınıfın veya üyelerin dışarıdan erişilebilir olduğunu belirtir.
- Yapıcı metot (Araba), nesne oluşturulurken başlangıç değerlerini ayarlar.
Nesne (Object) Nedir?
Bir nesne, bir sınıfın örneğidir. Sınıf bir plan ise, nesne bu plana göre oluşturulmuş somut bir varlıktır. Nesneler, sınıfın tanımladığı özellikleri ve davranışları taşır. C#'ta bir nesne oluşturmak için new anahtar kelimesi kullanılır.Nesne Oluşturma
Yukarıdaki Araba sınıfından nesne oluşturma örneği:
C#:
class Program
{
static void Main(string[] args)
{
// Nesne oluşturma
Araba araba1 = new Araba("Toyota", "Corolla", 2020);
Araba araba2 = new Araba("BMW", "X5", 2023);
// Nesne metotlarını çağırma
araba1.Hizlan(50); // Toyota Corolla şimdi 50 km/s hızda.
araba2.Hizlan(80); // BMW X5 şimdi 80 km/s hızda.
araba1.Dur(); // Toyota Corolla durdu.
}
}
Bu kodda:
- araba1 ve araba2, Araba sınıfından oluşturulan iki farklı nesnedir.
- Her nesne, kendi veri kopyasını (ör. Marka, Hiz) tutar.
- Nesneler, sınıfın metotlarını kullanarak davranış sergiler.
Sınıf ve Nesne ile İlgili Temel Kavramlar
1. Alanlar (Fields)
Sınıfın veri üyeleri, nesnelerin durumunu temsil eder. Örneğin, Marka ve Hiz alanları, bir arabanın özelliklerini depolar.2. Yapıcı Metotlar (Constructors)
Yapıcı metotlar, nesne oluşturulurken çağrılır ve başlangıç değerlerini ayarlar. Aynı isimde birden fazla yapıcı (overloading) tanımlanabilir:
C#:
public class Araba
{
public string Marka;
public int Yil;
// Varsayılan yapıcı
public Araba()
{
Marka = "Bilinmiyor";
Yil = 2000;
}
// Parametreli yapıcı
public Araba(string marka, int yil)
{
Marka = marka;
Yil = yil;
}
}
3. Özellikler (Properties)
C#'ta alanlara kontrollü erişim sağlamak için özellikler kullanılır. Örneğin:
C#:
public class Araba
{
private double hiz;
public double Hiz
{
get { return hiz; }
set
{
if (value >= 0) hiz = value;
else hiz = 0;
}
}
}
Bu, Hiz alanına yalnızca pozitif değerler atanmasını sağlar.
4. Erişim Belirteçleri
- public: Her yerden erişilebilir.
- private: Yalnızca sınıf içinden erişilebilir.
- protected: Sınıf ve türetilen sınıflardan erişilebilir.
- internal: Aynı assembly içinde erişilebilir.
Pratik Örnek: Öğrenci Yönetim Sistemi
Aşağıda, bir öğrenci yönetim sistemi için sınıf ve nesne kullanımına örnek verilmiştir:
C#:
public class Ogrenci
{
// Alanlar
private string ad;
private string soyad;
private int numara;
private List<double> notlar;
// Yapıcı
public Ogrenci(string ad, string soyad, int numara)
{
this.ad = ad;
this.soyad = soyad;
this.numara = numara;
notlar = new List<double>();
}
// Özellikler
public string Ad { get => ad; set => ad = value; }
public string Soyad { get => soyad; set => soyad = value; }
public int Numara { get => numara; set => numara = value; }
// Metotlar
public void NotEkle(double not)
{
if (not >= 0 && not <= 100)
notlar.Add(not);
}
public double OrtalamaHesapla()
{
return notlar.Count > 0 ? notlar.Average() : 0;
}
public void BilgiYazdir()
{
Console.WriteLine($"Öğrenci: {ad} {soyad}, Numara: {numara}, Ortalama: {OrtalamaHesapla():F2}");
}
}
class Program
{
static void Main(string[] args)
{
Ogrenci ogrenci1 = new Ogrenci("Ayşe", "Yılmaz", 1001);
ogrenci1.NotEkle(85);
ogrenci1.NotEkle(90);
ogrenci1.BilgiYazdir(); // Öğrenci: Ayşe Yılmaz, Numara: 1001, Ortalama: 87.50
Ogrenci ogrenci2 = new Ogrenci("Mehmet", "Kaya", 1002);
ogrenci2.NotEkle(70);
ogrenci2.BilgiYazdir(); // Öğrenci: Mehmet Kaya, Numara: 1002, Ortalama: 70.00
}
}
Bu örnekte:
- Ogrenci sınıfı, öğrencilerin bilgilerini ve notlarını yönetir.
- Özellikler, kontrollü veri erişimi sağlar.
- Metotlar, not ekleme, ortalama hesaplama ve bilgi yazdırma gibi işlevleri gerçekleştirir.
FAQs (Sıkça Sorulan Sorular)
1. Sınıf ile nesne arasındaki fark nedir?
- Sınıf: Bir nesnenin şablonudur; özelliklerini ve davranışlarını tanımlar.
- Nesne: Sınıfın bir örneğidir; sınıfın tanımladığı veri ve davranışları taşır.
2. Bir sınıfta birden fazla yapıcı metot tanımlanabilir mi?
Evet, yapıcı metotlar aşırı yükleme (overloading) ile farklı parametrelerle tanımlanabilir. Örneğin, varsayılan ve parametreli yapıcılar birlikte kullanılabilir.3. private ve public alanlar arasında ne fark var?
- private: Yalnızca sınıf içinden erişilebilir, dışarıdan erişilemez.
- public: Her yerden erişilebilir.
4. Özellikler (Properties) neden kullanılır?
Özellikler, alanlara kontrollü erişim sağlar. Örneğin, bir alana yalnızca belirli koşullarda değer atanmasını veya okunmasını sağlayabilir.5. Bir nesneyi nasıl kopyalarım?
C#'ta nesneler varsayılan olarak referans tipindedir. Bir nesneyi kopyalamak için:- Sığ Kopya (Shallow Copy): MemberwiseClone metodu kullanılır.
- Derin Kopya (Deep Copy): Özel bir kopyalama metodu yazmanız gerekir.
C#:
Araba araba1 = new Araba("Toyota", "Corolla", 2020);
Araba araba2 = (Araba)araba1.MemberwiseClone();