C# sınıf ve nesne nasıl kullanılır sorusunun kısa yanıtı şudur: Önce class ile bir türün hangi verileri taşıyacağı ve hangi davranışları sunacağı tanımlanır. Ardından new anahtar sözcüğüyle bu sınıftan bir nesne oluşturulur; property değerleri okunur veya değiştirilir, metotlar çağrılır.
Sınıf ve nesne arasındaki temel fark, sınıfın bir tanım, nesnenin ise program çalışırken kullanılan somut bir örnek olmasıdır. Bu ayrım, C# kodunda hangi satırın yapı oluşturduğunu, hangi satırın bu yapıyı kullandığını anlamayı kolaylaştırır.
C# sınıf ve nesne nasıl kullanılır?
Kullanım sırası üç adım olarak düşünülebilir: Önce sınıf bildirimiyle yapı tanımlanır, sonra new ile nesne oluşturulur, son olarak nesnenin üyeleri üzerinden veri ve davranış kullanılır. Örneğin bir sınıf, bir öğrencinin adını ve selam verme davranışını tarif edebilir. Oluşturulan her nesne ise bu tanımı kendi değerleriyle kullanır.
Bunu bir ev planı ve o plana göre yapılmış ev gibi düşünebilirsin. Sınıf bir planı tanımlar, nesne bu plana göre oluşturulmuş somut örnektir.
class Ogrenci ifadesi bir sınıf bildirimidir ve tek başına belirli bir öğrenci nesnesi oluşturmaz. Bu ifade, oluşturulacak nesnelerin hangi özelliklere ve davranışlara sahip olacağını tanımlar. Ogrenci ogrenci = new Ogrenci("Deniz"); satırında ise program çalışırken kullanılabilir bir nesne meydana gelir.
Nesne, new anahtar sözcüğüyle bu sınıftan oluşturulan örnektir. Bu nesne üzerinden property değerlerine ulaşabilir, metotları çağırabilir ve sınıfta tanımlanan davranışları çalıştırabilirsin. İlerleyen örneklerde class bildirimi, property, constructor ve metot arasındaki görev ayrımı daha net görülebilir. Nesnenin bir değişkene nasıl bağlandığını anlamak da referans davranışını kavramaya yardımcı olur.
C# temelleriyle ilgili başka anlatımları programlama ve yazılım konularındaki blog yazıları arasında inceleyebilirsin.
C# sınıfının temel parçaları ne işe yarar?

Bir sınıfın temel parçalarını görevlerine göre ayırmak, kodu okurken neyin veri, neyin başlangıç hazırlığı, neyin davranış olduğunu görmeni sağlar. class türün çerçevesini oluşturur. Alan yani field, veriyi doğrudan tutan üyedir. Property, get ve set erişimleriyle bu verinin okunma ve değiştirilme biçimini tanımlar. Constructor nesne oluşturulurken başlangıç değerlerini hazırlar. Metot ise yapılacak işi kodlar.
| Görev | Kod karşılığı | Kullanım amacı |
|---|---|---|
| class | class Ogrenci |
Veri ve davranışların ait olduğu türü tanımlar. |
| alan | private string ad; |
Veriyi sınıfın içinde doğrudan saklar. |
| property | public string Ad { get; set; } |
Değere erişme ve yeni değer atama biçimini belirler. |
| constructor | public Ogrenci(string ad) |
Nesne oluşturulurken başlangıç durumunu hazırlar. |
| metot | public void SelamVer() |
Nesnenin gerçekleştirdiği davranışı tanımlar. |
Aşağıdaki kısa konsol uygulamasında bu parçalar aynı sınıf üzerinde birlikte çalışır:
using System;
class Ogrenci
{
private string ad;
public string Ad
{
get { return ad; }
set { ad = value; }
}
public Ogrenci(string ad)
{
Ad = ad;
}
public void SelamVer()
{
Console.WriteLine("Merhaba, " + Ad);
}
}
class Program
{
static void Main()
{
Ogrenci ogrenci = new Ogrenci("Deniz");
ogrenci.SelamVer();
}
}
Beklenen çıktı:
Merhaba, Deniz
class Ogrenci, öğrenci nesnelerinin genel yapısını tanımlar.adalanı, öğrencinin adını sınıf içinde doğrudan saklar.privateolduğu için bu alana sınıfın dışından doğrudan erişilmez.Adproperty’si,getile değeri okumayı vesetile yeni değer vermeyi sağlar. Böylece veriye erişim için daha düzenli bir arayüz sunar.Ogrenci(string ad)constructor’ı, nesne oluşturulurken çalışır ve başlangıç adını belirler.new Ogrenci("Deniz")ifadesi hem nesneyi oluşturur hem de constructor’ı çağırır.SelamVer()metodu, nesnenin davranışını gerçekleştirir.ogrenci.SelamVer()satırı bu davranışı çalıştırır.
Kitap sınıfıyla çalışan konsol uygulaması nasıl yazılır?

Bir sınıfın nasıl çalıştığını görmek için kitap bilgilerini tutan ve kitabın ödünç durumunu değiştiren küçük bir konsol uygulaması yazabiliriz. Aşağıdaki örnekte Kitap sınıfı başlık, yazar ve ödünç alınma bilgilerini saklar.
using System;
class Kitap
{
public string Baslik { get; }
public string Yazar { get; }
public bool OduncAlindi { get; private set; }
public Kitap(string baslik, string yazar)
{
Baslik = baslik;
Yazar = yazar;
OduncAlindi = false;
}
public void OduncAl()
{
OduncAlindi = true;
}
public void BilgiYazdir()
{
string durum = OduncAlindi ? "Ödünçte" : "Rafta";
Console.WriteLine($"Başlık: {Baslik} | Yazar: {Yazar} | Durum: {durum}");
}
}
class Program
{
static void Main()
{
Kitap kitap = new Kitap("Simyacı", "Paulo Coelho");
kitap.BilgiYazdir();
kitap.OduncAl();
kitap.BilgiYazdir();
}
}
Beklenen çıktı:
Başlık: Simyacı | Yazar: Paulo Coelho | Durum: Rafta
Başlık: Simyacı | Yazar: Paulo Coelho | Durum: Ödünçte
- Class bildirimi:
class Kitapsatırı, kitap nesnelerinin hangi özelliklere ve davranışlara sahip olacağını tanımlar. - Property'ler:
BaslikveYazarkitapla ilgili metin bilgilerini tutar.OduncAlindiise kitabın ödünç alınıp alınmadığınıtrueveyafalseolarak saklar. - Constructor:
Kitapmetodu, nesne oluşturulurken başlık ve yazar bilgilerini alır. Ödünç durumu da başlangıçtafalseyapılır. Böylece yeni kitap rafta kabul edilir. newile nesne oluşturma:new Kitap(...)ifadesi,Kitapsınıfından gerçek bir nesne oluşturur ve constructor'ı çalıştırır.- Nokta operatörü:
kitap.BilgiYazdir()vekitap.OduncAl()ifadelerinde nokta operatörü, nesnenin metotlarına erişmek için kullanılır. - Durum değişimi: İlk bilgi yazdırıldığında
OduncAlindideğerifalseolduğu için durumRaftagörünür.OduncAlçağrısından sonra değertrueolur ve ikinci çıktıdaÖdünçteyazdırılır.
İki değişken aynı nesneyi gösterdiğinde ne olur?
Bir nesne oluşturduktan sonra başka bir değişkeni ilk değişkene eşitleyebilirsin. Bu durumda ikinci değişken yeni bir nesne oluşturmaz; ilk değişkenin gösterdiği aynı nesneye başvurur.
Kitap kitap1 = new Kitap("Simyacı", "Paulo Coelho");
Kitap kitap2 = kitap1;
kitap2.OduncAl();
kitap1.BilgiYazdir();
Beklenen çıktı:
Başlık: Simyacı | Yazar: Paulo Coelho | Durum: Ödünçte
Bu örnekte new yalnızca bir kez kullanılır. kitap2 = kitap1 ataması, kitap2 için yeni bir kitap oluşturmaz. İki değişken de aynı kitabı gösterdiği için kitap2 üzerinden yapılan OduncAl çağrısı, kitap1 üzerinden gözlemlenen durumu da değiştirir.
İki ayrı nesne oluşturmak istersen new anahtar sözcüğünü iki kez kullanmalısın:
Kitap kitap1 = new Kitap("Simyacı", "Paulo Coelho");
Kitap kitap2 = new Kitap("Simyacı", "Paulo Coelho");
Bu durumda kitapların bilgileri aynı olsa bile nesneler birbirinden ayrıdır. kitap2.OduncAl() çağrıldığında kitap1 nesnesinin ödünç durumu değişmez.
C# sınıf ve nesne kullanımını nasıl kontrol edebilirsin?
Kodunu denetlerken yalnızca derlenip derlenmediğine bakma. Sınıfın modeli tanımladığını, nesnenin bu modelden oluşturulduğunu ve metotların nesnenin durumunu değiştirdiğini şu sırayla kontrol edebilirsin:
- Sınıf bildirimini incele:
class Kitapbildirimi, nesnenin sahip olacağı özellikleri ve davranışları tanımlayan modeli göstermelidir. Sınıf bildirimi tek başına nesne oluşturmaz. - Property değerlerini doğrula:
AdveSayfaSayisigibi property'lerin, constructor'a veya sonradan yapılan atamalara verilen doğru değerleri taşıdığını kontrol et. - Constructor çağrısını kontrol et:
new Kitap(...)ifadesi constructor'ı çağırmalı ve başlangıç değerlerini nesneye aktarmalıdır. - Metotları nokta operatörüyle çalıştır:
kitap.SayfaEkle()gibi çağrılarda metot, işlem yapılacak nesnenin adından sonra nokta operatörüyle kullanılmalıdır. - İşlem öncesini ve sonrasını yazdır: Property değerlerini metot çalışmadan önce ve sonra konsola yazdır. Beklenen değişiklik çıktı üzerinde görünmelidir.
- Aynı nesne ile yeni nesneyi ayırt et: Bir değişkeni ikinci değişkene atadığında iki değişken aynı nesneyi gösterir ve yapılan değişiklik iki başvurudan da görülebilir.
new Kitap(...)ile oluşturulan nesne ise ayrı bir nesnedir; farklı değerler vererek çıktıda ayırt edebilirsin.
Takıldığın noktayı sınıf, property, constructor, metot ve referans kavramlarına ayırarak inceleyebilir, ardından ücretsiz yazılım bilgi testleri merkezi üzerinden temel bilgilerini sorularla kontrol edebilirsin. Kısaca, class modeli tanımlar, new constructor aracılığıyla nesne oluşturur, property'ler nesnenin durumunu taşır ve metotlar nokta operatörüyle çağrılarak bu duruma davranış kazandırır.