0Pricing
C# Academy · Ders

Yapılar: değer semantiği ve değişmezlik kalıbı

C# 6'da yapıların değer semantiğini anlayın ve değişmez bir yapı kalıbı (değişiklikte kopyalama) oluşturun.

Yapılar: değer semantiği ve değişmezlik kalıbı, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 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 3 dersten oluşur.

Yapılara genel bakış

Amaç: Yapıları güvenli biçimde kullanın.

  • Değer semantiği (atamada kopyalama)
  • C# 6'da değişmez yapı pattern'i
  • Değerle ve ref ile geçirme
  • Kutulama notu

Kopyalama semantiği

Yapılar değer türleridir: atama bir kopya oluşturur. Kopyayı değiştirmek özgün değeri değiştirmez.

using System;

// Simple struct with public fields for demo (okay for small POD data)
public struct Point
{
  public int X;
  public int Y;
}

public class Program
{
  public static void Main(string[] args)
  {
    Point a = new Point();
    a.X = 1; a.Y = 2;

    Point b = a;     // copy the value
    b.X = 9;         // change the copy

    Console.WriteLine("a=(" + a.X + "," + a.Y + ")");
    Console.WriteLine("b=(" + b.X + "," + b.Y + ")"); // different from a
  }
}

Değişmez yapı pattern'i

Değişmez yapıları tercih edin: readonly fields, gerekli durum için bir yapıcı ve yeni değerler oluşturan küçük With yardımcıları kullanın.

using System;

// Immutable struct pattern (C# 6): readonly fields + constructor + With method
public struct Money
{
  private readonly decimal _amount;
  private readonly string _currency;

  public decimal Amount { get { return _amount; } }
  public string Currency { get { return _currency; } }

  public Money(decimal amount, string currency)
  {
    _amount = amount;
    _currency = currency ?? "USD";
  }

  // Copy-on-change: returns a new value with updated amount
  public Money WithAmount(decimal amount)
  {
    return new Money(amount, _currency);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Money m1 = new Money(10m, "USD");
    Money m2 = m1.WithAmount(15m); // new value

    Console.WriteLine("m1: " + m1.Amount + " " + m1.Currency);
    Console.WriteLine("m2: " + m2.Amount + " " + m2.Currency);
  }
}

Değerle ve ref ile geçirme

Yöntemler varsayılan olarak bir kopya alır. Çağıranın yapısını değiştirmek için ref kullanın.

using System;

public struct Counter
{
  public int Value;
}

public class Program
{
  static void IncrementByValue(Counter c)
  {
    c.Value = c.Value + 1; // changes only the local copy
  }

  static void IncrementByRef(ref Counter c)
  {
    c.Value = c.Value + 1; // changes the caller's variable
  }

  public static void Main(string[] args)
  {
    Counter a = new Counter();
    IncrementByValue(a);
    Console.WriteLine("After by-value: " + a.Value); // 0

    IncrementByRef(ref a);
    Console.WriteLine("After by-ref: " + a.Value);   // 1
  }
}

Kutulamanın temelleri

Kutulama, bir yapıyı bir nesne/arayüz başvurusuna kopyalar. Kutudan çıkarma başka bir kopya oluşturur.

using System;

public interface IShow { string Show(); }

public struct Temperature : IShow
{
  public int C;
  public string Show() { return C + "C"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Temperature t = new Temperature();
    t.C = 25;

    object boxed = t;              // boxing: copy into object
    Temperature copy = (Temperature)boxed; // unbox (another copy)
    copy.C = 30;

    Console.WriteLine("t = " + t.C);     // 25
    Console.WriteLine("copy = " + copy.C); // 30
  }
}

Yapı ipuçları

İpuçları:

  • Küçük, değişmez değer nesneleri (koordinatlar ve para) için yapıları kullanın.
  • Büyük veya sıkça değiştirilen yapılardan kaçının.
  • Atama sırasında ve değerle geçirme sırasında kopyaların oluşturulduğunu unutmayın.
  • object/arayüz türüne dönüştürürken kutulamaya dikkat edin.

Yapının değer semantiği

Hızlı kontrol: C#'ta bir yapının değer semantiğini en iyi hangisi açıklar?

Özet

Özet: Yapılar değer türleridir. Küçük, değişmez tasarımları (yapıcı + readonly fields + With) tercih edin. Değerle ve ref ile geçirmenin ve kutulamanın kopyaları nasıl etkilediğini bilin.

Sıkça Sorulan Sorular

“Yapılar: değer semantiği ve değişmezlik kalıbı” dersi ücretsiz mi?

Evet — “Yapılar: değer semantiği ve değişmezlik kalıbı” 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 3 dersten oluşur.

“Yapılar: değer semantiği ve değişmezlik kalıbı” dersinde ne öğreneceğim?

C# 6'da yapıların değer semantiğini anlayın ve değişmez bir yapı kalıbı (değişiklikte kopyalama) oluşturun. 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, 3 dersinin 1. dersidir.

“Yapılar: değer semantiği ve değişmezlik kalıbı” 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. Yapılar: değer semantiği ve değişmezlik kalıbı
  2. Kayıt benzeri türler ve değere dayalı eşitlik kalıbı
  3. Numaralandırmalar ve [Flags]
← C# Academy Sayfasına Dön