0Pricing
C# Academy · Ders

Değer Türleri ve Başvuru Türleri

Her birinin nasıl saklandığını ve kopyalandığını görün.

Değer Türleri ve Başvuru Türleri, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

İki Tür Ailesi

C# türleri value türlerine (int, double, bool, yapılar) ve başvuru türlerine (sınıflar, dizeler, diziler) ayrılır. Bu türler saklanma ve kopyalanma biçimleri açısından farklıdır.

using System;

class Program
{
    static void Main()
    {
        int valueType = 5;          // value type
        int[] referenceType = { 1, 2, 3 };  // reference type
        Console.WriteLine(valueType + ", length " + referenceType.Length);
    }
}

value Türleri Veriyi Taşır

Bir value türü değişkeni verilerini doğrudan içerir. Bu veriler genellikle yığında veya kendilerini içeren nesnenin içinde yer alır.

using System;

class Program
{
    static void Main()
    {
        int a = 10;
        double b = 3.14;
        bool c = true;
        Console.WriteLine(a + ", " + b + ", " + c);
    }
}

Başvuru Türleri Bir Adres Tutar

Bir başvuru türü değişkeni, öbekte saklanan verilere yönelik bir başvuru (adres) tutar. Değişken ve nesne birbirinden ayrıdır.

using System;

class Box { public int Value; }

class Program
{
    static void Main()
    {
        Box b = new Box();   // b refers to a heap object
        b.Value = 42;
        Console.WriteLine(b.Value);
    }
}

Kopyalama Semantiği: value Türleri

Bir value türü atandığında veriler kopyalanır. Kopyayı değiştirmek hiçbir zaman original değeri etkilemez.

using System;

class Program
{
    static void Main()
    {
        int a = 1;
        int b = a;   // copy
        b = 99;
        Console.WriteLine("a=" + a + ", b=" + b);
    }
}

Kopyalama Anlamı: Referans Türleri

Bir referans türünü atamak, nesneyi değil referansı kopyalar. Böylece her iki değişken de aynı nesneyi gösterir.

using System;

class Box { public int Value; }

class Program
{
    static void Main()
    {
        Box a = new Box { Value = 1 };
        Box b = a;   // same object
        b.Value = 99;
        Console.WriteLine("a.Value=" + a.Value + ", b.Value=" + b.Value);
    }
}

Yapılar Değer Türleridir

Tanımladığınız bir struct değer türüdür; bu nedenle tıpkı int gibi atama sırasında kopyalanır.

using System;

struct Point { public int X, Y; }

class Program
{
    static void Main()
    {
        Point p1 = new Point { X = 1, Y = 2 };
        Point p2 = p1;   // full copy
        p2.X = 99;
        Console.WriteLine("p1.X=" + p1.X + ", p2.X=" + p2.X);
    }
}

Yöntemlere Geçirme

Varsayılan olarak değer türleri kopyalanarak geçirilir; referans türlerinde ise referansın bir kopyası geçirilir. Bu nedenle bir yöntem, çağıranın gördüğü bir sınıf nesnesini değiştirebilir, ancak sıradan bir int değerini değiştiremez.

using System;

class Counter { public int N; }

class Program
{
    static void BumpInt(int x) { x++; }
    static void BumpObj(Counter c) { c.N++; }

    static void Main()
    {
        int i = 0;
        BumpInt(i);
        var c = new Counter();
        BumpObj(c);
        Console.WriteLine("i=" + i + ", c.N=" + c.N);
    }
}

Boş Değer ve Referans Türleri

Yalnızca referans türleri null olabilir (bu, nesnenin bulunmadığı anlamına gelir). Değer türleri, ? ile boş değer alabilir olarak bildirilmedikçe her zaman bir değer içerir.

using System;

class Program
{
    static void Main()
    {
        string text = null;        // reference type can be null
        int? maybe = null;          // nullable value type
        Console.WriteLine((text == null) + ", " + (maybe == null));
    }
}

Eşitlik Farkları

Değer türlerinde == verileri karşılaştırır. Referans türlerinde ise ==, üzerine yazılmadığı sürece genellikle kimliği (aynı nesneyi) karşılaştırır.

using System;

class Program
{
    static void Main()
    {
        int a = 5, b = 5;
        Console.WriteLine("ints: " + (a == b));   // True - same value

        object o1 = new object();
        object o2 = new object();
        Console.WriteLine("objects: " + (o1 == o2));   // False - different identity
    }
}

Varsayılan Değerler

Değer türlerinin sıfır benzeri bir varsayılan değeri vardır (0, yanlış); referans türlerinin varsayılan değeri null olur.

using System;

class Program
{
    static void Main()
    {
        int defaultInt = default;
        bool defaultBool = default;
        string defaultString = default;
        Console.WriteLine(defaultInt + ", " + defaultBool + ", null? " + (defaultString == null));
    }
}

Hepsini Bir Araya Getirme

Bir türün değer türü mü yoksa referans türü mü olduğunu bilmek, kopyalama davranışını, boş değer alabilirliği ve yöntemlerin türü nasıl değiştirebileceğini öngörmenizi sağlar. Bu bilgi, doğru ve hatasız kodun temelini oluşturur.

using System;

struct Money { public decimal Amount; }
class Wallet { public decimal Amount; }

class Program
{
    static void Main()
    {
        Money m1 = new Money { Amount = 10 };
        Money m2 = m1; m2.Amount = 99;

        Wallet w1 = new Wallet { Amount = 10 };
        Wallet w2 = w1; w2.Amount = 99;

        Console.WriteLine("Money copy: " + m1.Amount + " (independent)");
        Console.WriteLine("Wallet ref: " + w1.Amount + " (shared)");
    }
}

Hızlı Kontrol

Değer türleri ile referans türleri konusundaki anlayışınızı sınayın.

Özet

Değer türleri (int, double, bool, yapılar) verileri doğrudan saklar ve atama sırasında kopyalanır; referans türleri (sınıflar, metinler, diziler) öbek bellekteki bir nesneye başvuru saklar ve başvuruyu kopyalar. Varsayılan olarak yalnızca referans türleri boş değer alabilir; iki tür ailesinin atama davranışı ve eşitlik kuralları da farklıdır.

using System;

struct V { public int N; }
class R { public int N; }

class Program
{
    static void Main()
    {
        V v1 = new V { N = 1 }; V v2 = v1; v2.N = 9;
        R r1 = new R { N = 1 }; R r2 = r1; r2.N = 9;
        Console.WriteLine(v1.N + " vs " + r1.N);
    }
}

Sıkça Sorulan Sorular

“Değer Türleri ve Başvuru Türleri” dersi ücretsiz mi?

Evet — “Değer Türleri ve Başvuru Türleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Değer Türleri ve Başvuru Türleri” dersinde ne öğreneceğim?

Her birinin nasıl saklandığını ve kopyalandığını görün. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Değer Türleri ve Başvuru Türleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Değer Türleri ve Başvuru Türleri
  2. Boxing ve Unboxing
  3. Örtük ve Açık Dönüşümler
  4. Convert Sınıfı ve Ayrıştırma
← C# Academy Sayfasına Dön