C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?

Cevap

Özellikstruct (value type)class (reference type)
Saklandığı yerDeğişken nerede ise orada (stack, dizi içinde, başka nesne içinde)Heap üzerinde, değişken sadece referans tutar
AtamaDeğerin tamamı kopyalanırSadece referans kopyalanır
GCKendi başına GC yükü oluşturmazGC tarafından toplanır
KalıtımYok (interface uygulayabilir)Var
nullOlamaz (Nullable<T> hariç)Olabilir

Unity'de Vector3, Quaternion, Color struct'tır. Bu yüzden şu kod çalışmaz:

transform.position.x = 5f;   // derleme hatası: kopyanın alanı değiştirilemez

Vector3 p = transform.position;  // kopya al
p.x = 5f;
transform.position = p;          // geri ata

Oyunda neden önemli

  • Her kare oluşturulan küçük veriler (vektör, hasar bilgisi) struct olursa heap allocation ve GC spike oluşmaz.
  • Struct dizileri bellekte ardışık durur, cache dostudur; DOTS/ECS bu yüzden struct tabanlıdır.

Dikkat

  • Büyük struct'lar (16-32 byte üstü) her geçişte kopyalandığı için yavaşlayabilir; in / ref parametreleriyle geçilebilir.
  • Struct'ı object veya interface olarak kullanmak boxing yaratır ve heap allocation'a yol açar.
  • Değiştirilebilir (mutable) struct'lar kopya semantiği yüzünden sinsi hatalara yol açar; mümkünse readonly struct kullanın.
  1. Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?KolayUnity & C#Game Dev
  2. GetComponent çağrılarını neden önbelleğe almalısınız?KolayUnity & C#Game Dev
  3. Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?OrtaUnity & C#Game Dev
  4. C# delegate, event ve UnityEvent arasındaki farklar nelerdir?OrtaUnity & C#Game Dev
  5. Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?ZorUnity & C#Game Dev
  6. Prefab nedir? Prefab variant ve nested prefab ne işe yarar?KolayUnity & C#Game Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle