C# Academy · Pelajaran

Konstanta dan Field readonly

Bedakan const dari static readonly.

Pelajaran 3 dari 413 langkah

Konstanta dan Field readonly adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Dua Cara Membuat Nilai Tetap

C# menyediakan const dan readonly untuk nilai yang seharusnya tidak berubah. Keduanya tampak serupa, tetapi berperilaku sangat berbeda. Pelajaran ini membandingkan keduanya.

using System;

class Config
{
    public const double Pi = 3.14159;
    public static readonly DateTime StartedAt = DateTime.Now;
}

class Program
{
    static void Main()
    {
        Console.WriteLine("Pi = " + Config.Pi);
    }
}

const: Konstanta Waktu Kompilasi

const harus diberi nilai literal saat deklarasi dan ditetapkan pada waktu kompilasi. const secara implisit bersifat statis.

using System;

class Circle
{
    public const double Pi = 3.14159;

    public static double Area(double r) => Pi * r * r;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Circle.Area(2).ToString("0.00"));
    }
}

const Harus Berupa Literal

Karena ditentukan pada waktu kompilasi, const hanya dapat menyimpan ekspresi konstanta: angka, string, boolean, atau konstanta const lainnya.

using System;

class Limits
{
    public const int MaxRetries = 3;
    public const int Timeout = MaxRetries * 1000;   // const expression OK
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Limits.MaxRetries + ", " + Limits.Timeout);
    }
}

readonly: Konstanta Saat Program Berjalan

Atribut readonly ditetapkan satu kali, saat deklarasi atau di dalam konstruktor, lalu tidak dapat diubah. Nilainya dapat dihitung saat program berjalan.

using System;

class Session
{
    public readonly string Id;

    public Session(string id)
    {
        Id = id;   // allowed: inside constructor
    }
}

class Program
{
    static void Main()
    {
        var s = new Session("abc-123");
        Console.WriteLine("Session: " + s.Id);
    }
}

readonly Dapat Menggunakan Nilai Saat Program Berjalan

Berbeda dengan const, atribut readonly dapat menyimpan nilai yang baru diketahui saat program berjalan, seperti id yang dibuat otomatis atau waktu saat ini.

using System;

class Order
{
    public readonly Guid OrderId;

    public Order()
    {
        OrderId = Guid.NewGuid();
    }
}

class Program
{
    static void Main()
    {
        var o = new Order();
        Console.WriteLine("Has id: " + (o.OrderId != Guid.Empty));
    }
}

static readonly

Gabungkan static readonly untuk nilai yang berlaku di seluruh kelas dan dihitung satu kali saat program berjalan. Ini merupakan pengganti const yang umum ketika nilainya bukan literal.

using System;

class AppInfo
{
    public static readonly string[] Roles = { "admin", "user", "guest" };
}

class Program
{
    static void Main()
    {
        Console.WriteLine("Roles: " + Roles());
    }

    static int Roles() => AppInfo.Roles.Length;
}

Mengapa const Dapat Berisiko Antar-Rakitan

Karena nilai const disisipkan langsung ke dalam kode pemanggil saat kompilasi, mengubah const publik dalam pustaka mengharuskan semua pemanggil dikompilasi ulang. static readonly menghindari hal ini.

using System;

class Lib
{
    public const int Version = 2;              // inlined into callers
    public static readonly int Build = 100;     // read at runtime
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Lib.Version + "." + Lib.Build);
    }
}

Keduanya Tidak Dapat Ditetapkan Ulang

Setelah inisialisasi, baik bidang const maupun readonly tidak dapat diubah. Upaya untuk melakukannya menghasilkan kesalahan kompilasi.

using System;

class Demo
{
    public const int A = 10;
    public readonly int B;

    public Demo() { B = 20; }
    // A = 11;  // would not compile
    // B = 21;  // would not compile outside constructor
}

class Program
{
    static void Main()
    {
        var d = new Demo();
        Console.WriteLine(Demo.A + ", " + d.B);
    }
}

Memilih di Antara Keduanya

Gunakan const untuk nilai harfiah yang benar-benar tidak pernah berubah (pi, MaxInt). Gunakan readonly jika nilainya dihitung saat program berjalan atau dapat berbeda untuk setiap instans.

using System;

class Physics
{
    public const double Gravity = 9.81;          // universal literal
    public readonly double Mass;                  // per object

    public Physics(double mass) { Mass = mass; }
    public double Weight() => Mass * Gravity;
}

class Program
{
    static void Main()
    {
        var p = new Physics(10);
        Console.WriteLine("Weight: " + p.Weight());
    }
}

Catatan tentang Referensi readonly

readonly mengunci bidangnya, bukan objek yang ditunjuknya. Referensi daftar yang hanya-baca tidak dapat ditetapkan ulang, tetapi isinya tetap dapat berubah.

using System;
using System.Collections.Generic;

class Cart
{
    public readonly List<string> Items = new List<string>();
}

class Program
{
    static void Main()
    {
        var c = new Cart();
        c.Items.Add("Pen");   // allowed: mutating the object
        c.Items.Add("Book");
        Console.WriteLine("Items: " + c.Items.Count);
    }
}

Menggabungkan Semuanya

Kelas yang umum menggunakan const untuk nilai harfiah tetap dan readonly untuk nilai yang ditetapkan satu kali per instans saat konstruksi.

using System;

class Account
{
    public const decimal MinBalance = 0m;
    public readonly string Owner;

    public Account(string owner)
    {
        Owner = owner;
    }
}

class Program
{
    static void Main()
    {
        var a = new Account("Rin");
        Console.WriteLine(a.Owner + " min=" + Account.MinBalance);
    }
}

Uji Cepat

Uji pemahaman Anda tentang konstanta dan bidang yang hanya-baca.

Rangkuman

const adalah nilai harfiah pada waktu kompilasi, secara implisit bersifat statis, dan disisipkan langsung ke dalam pemanggil. readonly ditetapkan satu kali saat deklarasi atau di konstruktor dan dapat menggunakan nilai saat program berjalan. Gunakan const untuk nilai harfiah yang benar-benar tetap, static readonly untuk nilai bersama yang dihitung saat program berjalan, dan ingat bahwa readonly mengunci referensinya, bukan objeknya.

using System;

class Demo
{
    public const int Max = 100;
    public readonly int Created;
    public Demo(int c) { Created = c; }
}

class Program
{
    static void Main()
    {
        var d = new Demo(7);
        Console.WriteLine(Demo.Max + ", " + d.Created);
    }
}
Gratis untuk memulai

Belajar C# dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
93
Pelajaran
346

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Konstanta dan Field readonly” gratis?

Ya — teks lengkap “Konstanta dan Field readonly” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Konstanta dan Field readonly”?

Bedakan const dari static readonly. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Konstanta dan Field readonly” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Metode dan Field Statis
  2. Kelas Statis untuk Utilitas
  3. Konstanta dan Field readonly
  4. Desain Statis vs Instance
← Kembali ke C# Academy