Menu
Coddy logo textTech

Örnek vs Statik Veri

Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 15 / 70.

Artık statik üyeleri anladığınıza göre, örnek verilerin ne zaman, statik verilerin ne zaman kullanılacağını açıklığa kavuşturalım. Bu karar, sınıfınızın bilgileri nasıl depolayıp paylaştığını şekillendirir.

Örnek verisi her bir nesneye bireysel olarak aittir. Her nesne kendi kopyasını alır ve bir nesne üzerindeki değişiklikler diğerlerini etkilemez:

public class BankAccount
{
    public string Owner { get; set; }      // Örnek - her hesap için benzersiz
    public decimal Balance { get; set; }   // Örnek - her hesap için benzersiz
}

Her bir BankAccount kendi sahibine ve bakiyesine sahiptir. Bu mantıklıdır çünkü farklı hesaplar farklı kişiler için farklı tutarlar tutar.

Statik veriler sınıfın kendisine aittir ve tüm örnekler arasında paylaşılır:

public class BankAccount
{
    public static decimal InterestRate = 0.05m;  // Statik - tümü için aynı
    public static int TotalAccounts = 0;         // Statik - tüm hesapları takip eder
    
    public string Owner { get; set; }
    public decimal Balance { get; set; }
}

Faiz oranı her hesap için eşit şekilde uygulanır, bu nedenle statik olması mantıklıdır. Toplam hesap sayacı, bireysel hesap verilerini değil, sınıf genelindeki bilgileri takip eder.

Basit bir kural: Veri belirli bir nesneyi tanımlıyorsa onu örnek üyesi yap. Sınıfı bir bütün olarak tanımlıyorsa veya paylaşılması gerekiyorsa onu statik yap. Bunları yanlış şekilde karıştırmak, verilerin nesneler arasında beklenmedik şekilde değiştiği ya da gerektiğinde erişilemediği hatalara yol açar.

challenge icon

Görev

Kolay

Bireysel oyunculara ait veriler ile tüm oyun genelinde paylaşılan veriler arasındaki farkı gösteren bir oyun oturumu takip sistemi oluşturalım.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • Player.cs: Player ad alanında bir GameSession sınıfı tanımlayın. Her oyuncunun kendine ait bir Username (string) ve Score (int) değeri vardır; bunlar her oyuncuya özgüdür. Sınıf ayrıca tüm oyuncular için geçerli olan bilgileri de takip etmelidir: herkesin oynadığı oyunun adını depolayan bir static alan GameName (string) ve kaç oyuncunun katıldığını sayan bir static alan TotalPlayers (int). Kullanıcı adını ve başlangıç puanını alan ve toplam oyuncu sayısını otomatik olarak artıran bir kurucu ekleyin. Oyun adını yapılandırmak için bir static metot SetGameName(string name) ekleyin.
  • Program.cs: Ana dosyanızda oyunu ayarlayın ve girdilere göre oyuncular oluşturun. Önce oyun adını belirleyin, ardından iki oyuncu oluşturun ve paylaşılan oyun verileriyle birlikte oyuncuların bireysel bilgilerini görüntüleyin.

Beş girdi alacaksınız:

  • Oyun adı
  • İlk oyuncunun kullanıcı adı
  • İlk oyuncunun başlangıç puanı
  • İkinci oyuncunun kullanıcı adı
  • İkinci oyuncunun başlangıç puanı

Çıktıyı şu biçimde yazdırın:

Game: {GameName}
Player: {Username}, Score: {Score}
Player: {Username}, Score: {Score}
Total Players: {TotalPlayers}

Örneğin girdiler BattleArena, DragonSlayer, 1500, ShadowNinja ve 2200 ise çıktı şu şekilde olmalıdır:

Game: BattleArena
Player: DragonSlayer, Score: 1500
Player: ShadowNinja, Score: 2200
Total Players: 2

Hangi verilerin örneğe dayalı olması gerektiğini (her oyuncu için farklı) ve hangilerinin static olması gerektiğini (tüm oyuncular arasında paylaşılan) dikkatlice düşünün. Oyun adı ve toplam oyuncu sayısı oturumun tamamını tanımlarken, kullanıcı adı ve puan her bir oyuncuya özgüdür.

Kendin dene

using System;

namespace GameSession
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Girdileri oku
            string gameName = Console.ReadLine();
            string username1 = Console.ReadLine();
            int score1 = Convert.ToInt32(Console.ReadLine());
            string username2 = Console.ReadLine();
            int score2 = Convert.ToInt32(Console.ReadLine());

            // TODO: Statik yöntemi kullanarak oyun adını ayarla

            // TODO: Giriş verileriyle iki Player nesnesi oluşturun

            // TODO: Çıktıyı istenen formatta yazdırın
            // Game: {GameName}
            // Player: {Username}, Score: {Score}
            // Player: {Username}, Score: {Score}
            // Total Players: {TotalPlayers}
        }
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C# derleyicisi